0

하위 모델에 OneToOneField (상위)를 related_name='children'으로 생성했습니다. 내 견해로는, select_related을 사용하여 쿼리 세트를 얻었습니다. 그러나 내 페이지에서 부모와 관련된 자녀 목록은 비어있는 것으로 표시됩니다.Django : OneToOneField에 select_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) 

템플릿 : 당신은 단순히 parent.children 액세스 할 수 있도록

{% for parent in parent_queryset %} 
{% child in parent.children.all %} 
{{ child.price }} 
{% endfor %} 
{% endfor %} 
+0

@Bobort, 감사합니다. 변경했습니다. – sumanth

답변

4

그것은 하나 개의 필드에 하나 (의 당신 때문에 have parent.children.all()을 통해 루핑하는 대신 related_name='children'을가집니다.

자식이 하나 뿐이므로 related_name='children'을 제거하면 parent.children 대신 parent.child에 액세스하게됩니다. 일대일 필드에도 unique=True이 필요하지 않습니다.

parent = models.OneToOneField(Parent) 

그런 다음 템플릿 : select_related를 사용하여 템플릿의 개체에 액세스하는 방식을 변경하지 않는 것을

{% for parent in parent_queryset %} 
    {{ parent.child.price }} 
{% endfor %} 

참고, 그냥 SQL 쿼리의 수를 줄일 수 있습니다.

관련 문제