0

Carモデルと、オブジェクトPassengerへの ForeignKey を持つモデルがありますCarCarPassengerモデルの両方にフィーname​​ルドがあります。

車または乗客の名前に「バナナ」が含まれているすべての車を取得したいので、次のことを試しました。

from django.db.models import Q
...
name = 'banana'
cars = Car.objects.filter(Q(name__icontains=name) | Q(passenger__name__icontains=name))

不思議なことに、Car'banana' という名前があり、その中に 3 人の乗客がいて ('banana' に一致するかどうかに関係なく) 何かを呼び出すと、 matching の 3 倍が返されますCar

質問は次のとおりです。

  • なんで?

  • 車を一度だけ返却するには?うまくいくと思います.distinct()が、もっと良い方法があるかもしれません。

Django 1.5 を使用しています。

4

1 に答える 1

2

他の人があなたが欲しいものを手に入れる方法に答えましたが、あなたは理由も尋ねたので、ここに行きます:

クエリは次のようになります。

SELECT * FROM cars c
LEFT JOIN passengers p ON p.car_id = c.id
WHERE c.name LIKE '%banana%' OR p.name LIKE '%banana%' 

基本的に、あなたは車を乗客に結合していて、car.name が「banana」である車には 3 人の乗客がいます。したがって、3 行が返されます。

于 2013-08-27T18:53:08.420 に答える