Django Models Внешний ключ Field Match - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть следующая модель Django -

class M(models.Model):
    ...
    disp_name = models.CharField(max_length=256, db_index=True)
    ...

class XX(models.Model):
    x = models.ForeignKey(User)
    y = models.ForeignKey(M, unique=True)

Теперь в моем views.py я хочу выполнить частичное совпадение строк для всех элементов в XX с полем y.disp_name.

Обычно это можно сделать - M.objects.filter(disp_name__istartswith='string')

Но здесь M - это чужой ключ в Model XX.Поэтому, если я XX.objects.filter(y.disp_name__istartswith='string') получаю ошибку.

Кроме того, это тоже не получается - u = User.objects.get(id=1) u.xx_set.filter(y.disp_name__istartswith='string')

Исключение, которое я получаю, говорит: SyntaxError: keyword can't be an expression (<console>, line 1)

Каксделать это?

1 Ответ

2 голосов
/ 22 ноября 2010

Хотелось бы, чтобы вы использовали правильные имена полей, а не X, Y и M - за этим действительно трудно следить.

Но в любом случае вы всегда должны использовать синтаксис с двойным подчеркиванием, чтобы следовать отношениям в левой части выражения фильтра:

XX.objects.filter(y__disp_name__istartswith='string')

(Техническая причина этого заключается в том, что параметры filter на самом деле являются ключевыми аргументами функции, поэтому ее левой частью должна быть строка, а не выражение.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...