0

Ich habe ein OneToOneField (Eltern) in Child-Modell mit related_name='children' erstellt. In meinen Ansichten habe ich select_related verwendet, um das Abfrage-Set abzurufen. Aber auf meiner Seite zeigt die Liste der Kinder, die einem Elternteil zugeordnet sind, leer.Django: Wie benutzt man select_related für ein 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) 

Vorlage:

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

@Bobort, Danke, ich habe es geändert – sumanth

Antwort

4

Es ist ein 0.59 Feld, so dass Sie einfach parent.children zugreifen (weil Sie haben related_name='children') anstelle von parent.children.all() durchschleifen.

Da es nur ein Kind gibt, würde ich die related_name='children' entfernen, dann werden Sie auf parent.child statt parent.children zugreifen. Sie brauchen auch nicht unique=True für ein Eins-zu-Eins-Feld.

parent = models.OneToOneField(Parent) 

Dann in der Vorlage:

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

Beachten Sie, dass select_related mit nicht so, wie Sie die Objekte in der Vorlage zugreifen ändern, reduziert nur die Anzahl der SQL-Abfragen.