Python 在列表视图中获取Django模型以显示两者
我有以下型号: 第条:Python 在列表视图中获取Django模型以显示两者,python,django,listview,foreign-keys,django-queryset,Python,Django,Listview,Foreign Keys,Django Queryset,我有以下型号: 第条: class Article(models.Model): sku = models.CharField( max_length=5, primary_key=True, validators=[MinLengthValidator(5)] ) ean = models.CharField( max_length=13, unique=True, vali
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中显示这两个项目。需要有项目和外键,并在相同的迭代中查看它。我想用类列表视图和django的方法来做,但不要做坏事。
我有这个列表视图:
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 %}
{%extends“base.html”%}
{%block content%}
{文章列表%中的文章为%0}
{{article.translations.NEED__TO_SHOW_THAT_PARAMETER}}
{%endfor%}
{%endblock内容%}
在您的视图中,您已经获得了正确的数据。因此,在模板中,您可以简单地循环浏览文章
对象及其外键值(因为它们可以使用相关的\u name
访问)
您使用的是{%for article\u list%}
因此我相信您在视图中设置了上下文\u对象\u名称='article\u list'
我猜您可能想访问翻译
模型的额外字段。如果您的模型看起来像这样:
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',
)
language = models.CharField(max_length=10, choices=LANGUAGE_CHOICES)
然后在模板中,您可以执行以下操作:
{% extends "base.html" %}
{% block content %}
{% for article in article_list %}
<div class="container">
{% for object in article.translations.all %}
<h2>Chosend language - {{ object.language }}</h2>
{% endfor %}
</div>
{% endfor %}
{% endblock content %}
{%extends“base.html”%}
{%block content%}
{文章列表%中的文章为%0}
{%用于article.translations.all%中的对象}
Chosend语言-{object.language}
{%endfor%}
{%endfor%}
{%endblock内容%}
说明:
article.translations.all
将为您提供一篇文章的所有翻译,使用它您可以获得字段值{code>{{article.translations.all}}
是模板中翻译的列表(相当于python代码中的article.translations.all()
)。因此,您可以循环使用它,例如,..g{%for translation in article.translations.all%}
并在循环中显示您想要的任何内容,例如{{translation.id}
。