4

で子モデルに OneToOneField(parent) を作成しましたrelated_name='children'。私の見解では、以前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()

ビュー.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

これは 1 対 1 のフィールドであるため、をループする代わりにparent.children( があるため) にアクセスするだけです。related_name='children'parent.children.all()

子は 1 つしかないため、 を削除すると、 の代わりにrelated_name='children'アクセスできるようになります。1 対 1 のフィールドも必要ありません。parent.childparent.childrenunique=True

parent = models.OneToOneField(Parent)

次に、テンプレートで次のようにします。

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

select_relatedを使用しても、テンプレート内のオブジェクトにアクセスする方法は変わらず、SQL クエリの数が減るだけであることに注意してください。

于 2016-08-01T14:55:07.993 に答える