0

Я создал OneToOneField (родительский) в модели Child с related_name='children'. В моих представлениях я использовал select_related, чтобы получить запрос. Но на моей странице список дочерних элементов, связанных с родителем, отображается пустым.Django: Как использовать select_related для OneToOneField?

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

@Bobort, Спасибо, я изменил его – sumanth

ответ

4

Это один к одному полю, так что вы просто получить доступ к 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.