Django:如何对 OneToOneField 使用 select_related?
Django : How to use select_related for a OneToOneField?
我用 related_name='children'
在 Child 模型中创建了一个 OneToOneField(parent)。在我看来,我使用 select_related
来获取查询集。但是在我的页面中,与 parent 关联的 children 列表显示为空。
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_name='children'
)而不是循环访问 parent.children.all()
.
因为只有一个 child,我会删除 related_name='children'
,然后您将访问 parent.child
而不是 parent.children
。 one-to-one 字段也不需要 unique=True
。
parent = models.OneToOneField(Parent)
然后,在您的模板中:
{% for parent in parent_queryset %}
{{ parent.child.price }}
{% endfor %}
请注意,使用 select_related
不会改变您在模板中访问 objects 的方式,它只会减少 SQL 查询的数量。
我用 related_name='children'
在 Child 模型中创建了一个 OneToOneField(parent)。在我看来,我使用 select_related
来获取查询集。但是在我的页面中,与 parent 关联的 children 列表显示为空。
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_name='children'
)而不是循环访问 parent.children.all()
.
因为只有一个 child,我会删除 related_name='children'
,然后您将访问 parent.child
而不是 parent.children
。 one-to-one 字段也不需要 unique=True
。
parent = models.OneToOneField(Parent)
然后,在您的模板中:
{% for parent in parent_queryset %}
{{ parent.child.price }}
{% endfor %}
请注意,使用 select_related
不会改变您在模板中访问 objects 的方式,它只会减少 SQL 查询的数量。