【发布时间】:2019-09-24 02:13:33
【问题描述】:
我有这个模型:
文章:
class Article(models.Model):
sku = models.CharField(
max_length=5,
primary_key=True,
validators=[MinLengthValidator(5)]
)
ean = models.CharField(
max_length=13,
unique=True,
validators=[MinLengthValidator(13)]
)
parent = models.ForeignKey(
'Article',
related_name='children',
null=True,
blank=True,
on_delete=models.PROTECT
)
...
和文章翻译:
class ArticleTranslation(models.Model):
LANGUAGE_CHOICES = (
(settings.ENGLISH, _("english")),
(settings.FRENCH, _("french")),
(settings.GERMAN, _("german")),
(settings.ITALIAN, _("italian")),
(settings.PORTUGUESE, _("portuguese")),
(settings.SPANISH, _("spanish")),
)
article = models.ForeignKey(
'Article',
on_delete=models.CASCADE,
related_name='translations',
)
我需要返回两者,结合起来显示 Django 模板 HTML 中的 2 个项目。需要拥有项目和外键并在相同的迭代中看到它。我想用 List View 和 django 类的方法来做,而不是做坏事。 我有这个 ListView:
def get_queryset(self):
queryset = (Article.objects
.all()
.prefetch_related('translations')
.order_by('-sku'))
print(queryset)
return queryset
并且在我的 HTML 中,需要显示外键值:
{% extends "base.html" %}
{% block content %}
{% for article in article_list %}
<div class="container">
<h2>{{ article.translations.NEED_TO_SHOW_THAT_PARAMETER }}</h2>
</div>
{% endfor %}
{% endblock content %}
【问题讨论】:
-
{{ article.translations.all }}是模板中translations的列表(相当于python 代码中的article.translations.all())。因此,您可以循环播放它,例如{% for translation in article.translations.all %}并在循环中显示您想要的任何内容,例如{{ translation.id }}.
标签: python django listview foreign-keys django-queryset