我在Child模型中使用related_name='children'
创建了OneToOneField(父级)。在我的观看中,我使用select_related
来获取查询集。但是在我的页面中,与父项关联的子项列表显示为空。
Models.py:
class Parent(models.Model):
item = models.CharField(max_length=20)
class Child(models.Model):
parent = models.OneToOneField(Parent, unique = True, related_name = 'children')
price = models.IntegerField()
views.py:
def live_prices(request):
parent_queryset = Parent.objects.all().select_related('children')
return render(request, 'live_prices.html', 'parent_queryset' : parent_queryset)
模板:
{% for parent in parent_queryset %}
{% child in parent.children.all %}
{{ child.price }}
{% endfor %}
{% endfor %}
答案 0 :(得分:7)
这是一对一的字段,因此您只需访问parent.children
(因为您拥有related_name='children'
),而不是循环浏览parent.children.all()
。
由于只有一个孩子,我会删除related_name='children'
,然后您将访问parent.child
而不是parent.children
。对于一对一字段,您也不需要unique=True
。
parent = models.OneToOneField(Parent)
然后,在您的模板中:
{% for parent in parent_queryset %}
{{ parent.child.price }}
{% endfor %}
请注意,使用select_related
不会改变您访问模板中对象的方式,只会减少SQL查询的数量。