2013-10-03 1 views
0

моя модель определяется следующим образом:Как сделать Q-запросы с моделями с внешними ключами?

class Model2(models.Model): 
    id = models.IntegerField(primary_key=True) 
    name = ... 

class Model1(models.Model): 
    id = models.IntegerField(primary_key=True) 
    model2 = models.ForeignKey(Model2, to_field='id', db_column='model2') 

Проблема заключается в том, я не знаю, как сделать OR запросы с QuerySet.

qs = Model1.objects.filter(Q(model2.id__icontains=search) | Q(id__icontains=search)) 

я

ключевое слово не может быть выражением

Таким образом, вопрос, как я могу ссылаться на поле соответствующей модели Q запросов? Благодаря

ответ

0

Это должно работать:

qs = Model1.objects.filter(Q(model2__id=search) | Q(id=search)) 

Я хотел бы вернуться к реализации, если вы ищете id__icontains

Если вы ищете 1, то он будет искать 1, 11, 121, 166. .., (любой id с 1 в нем), который, вероятно, не тот, который вы хотите.

Чтобы конкретно указать вашу ошибку,

Q(model2.id__icontains=search) 

должен быть

Q(model2__id__icontains=search) 
+0

Большое спасибо. – Ladiko