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,谢谢,我已经更改了它