Комплексный поиск в Джанго - PullRequest
2 голосов
/ 19 ноября 2011

У меня есть класс с несколькими полями, два из которых являются полями «многие ко многим»:

class someClass(models.Model):
    field1 = ...
    field2 = ...
    field3 = ...
    field4 = models.ManytoManyField(...)
    field5 = models.ManytoManyField(...)

Я изначально надеялся использовать someClass.objects.get(...) позже:

someClass.objects.get(field1=..., field2=..., ...)

Я также хотел бы ограничить someClass es, которые возвращаются также field4 и field5. Я предполагаю, что я не могу сделать это в вызове .get(), потому что они представляют отношения «многие ко многим», которые могут принимать различные формы.

В то время, когда я хотел бы найти уникальный someClass, у меня был бы доступ к нескольким переменным, которые соответствуют объектам, представленным в field1-field3, а также к двум коротким спискам объектов, которые соответствуют объектам представлены в поле4 и в поле5. Вместе они должны описать уникальный экземпляр.

Принятие того, что мне, возможно, придется сделать это в серии .filter() с, что является наилучшим способом для меня получить один someClass объект, который мои данные (опять же, одна переменная для каждого field1-field3 и два списки для field4 и field5) описывает?

1 Ответ

1 голос
/ 19 ноября 2011

Я думаю, что ответ так же очевиден, как вы ожидаете ...

Вы определенно не можете использовать get здесь из-за m2m s - вы должны объединить фильтры в цепочку, чтобы исключить результаты, которыесодержат неточные совпадения m2m.

query = someClass.objects.filter(field1=field1, field2=field2, field3=field3)

for item in list1:
   query = query.filter(foo=item)

for item in list2:
   query = query.filter(bar=item)

# substitute with fancy python as you wish.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...