4

我在 Child 模型中创建了一个 OneToOneField(parent) related_name='children'。在我看来,我曾经select_related获取查询集。但是在我的页面中,与父级关联的子级列表显示为空。

模型.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()

视图.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 %}
4

1 回答 1

10

这是一对一的字段,因此您只需访问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 查询的数量。

于 2016-08-01T14:55:07.993 回答