Django:如何对OneToOneField使用select_related?
我已在子模型中使用Django:如何对OneToOneField使用select_related?,django,django-models,django-views,one-to-one,django-select-related,Django,Django Models,Django Views,One To One,Django Select Related,我已在子模型中使用相关的\u name='children'创建了OneToOneField(父项)。在我的视图中,我使用select\u related获取查询集。但在我的页面中,与父项关联的子项列表显示为空 Models.py: class Parent(models.Model): item = models.CharField(max_length=20) class Child(models.Model): parent = models.OneToOneField(
相关的\u name='children'
创建了OneToOneField(父项)。在我的视图中,我使用select\u 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 %}
这是一个一对一的字段,因此您只需访问
parent.children
(因为您有related\u name='children'
),而不是循环访问parent.children.all()
由于只有一个子项,我将删除相关的\u name='children'
,然后您将访问parent.child
,而不是parent.children
。一对一字段也不需要unique=True
parent = models.OneToOneField(Parent)
然后,在模板中:
{% for parent in parent_queryset %}
{{ parent.child.price }}
{% endfor %}
请注意,使用select\u related
不会改变您访问模板中对象的方式,它只是减少了SQL查询的数量。@Bobort,谢谢,我已经更改了它