我的模型如下:我有一組Dude
s,並且每個Dude
都有一組偏好。我可以根據他們的偏好很容易地找到Dude
,但我需要找到那些更喜歡兩種不同的東西。我試圖將兩個Q
對象傳遞給filter()
函數,但在生成的SQL中這兩個對象引用了相同的相關Preference
。我想讓他們參考兩種不同的Preferences
。更糟糕的是,我需要查詢相關模型的幾個屬性(= Preference
),所以我不能使用簡單的__in
。Django:相關模型的多個實例上的filter()
型號:
class Dude(models.Model):
name = models.CharField(max_length=200)
class Preference(models.Model):
name = models.CharField(max_length=200)
how_much = models.CharField(max_length=200)
dude = models.ForeignKey(Dude)
測試用例:
class DudesTestCase(TestCase):
def setUp(self):
dude = Dude.objects.create(name = 'Dude')
cheese = Preference.objects.create(name = 'Cheese', how_much = "very", dude = dude)
bacon = Preference.objects.create(name = 'Bacon', how_much = "absolutely_love", dude = dude)
# does work
def test_cheese_lovers(self):
d = Dude.objects.filter(preference__name = 'Cheese', how_much = "very")
self.assertEquals(d[0].name, 'Dude')
# does not work - wants a single Preference to be both cheese and bacon
def test_cheese_and_bacon_lovers(self):
d = Dude.objects.filter(
Q(preference__name = 'Cheese', how_much = "very"),
Q(preference__name = 'Bacon', how_much = "absolutely_love"),
)
self.assertEquals(d[0].name, 'Dude')
澄清: 我不希望找帥哥喜歡或者奶酪或臘肉,我需要人同時滿足兩個條件。