У меня есть следующие модели Django -Django модели ссылочное поле Match
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
является ForeignKey в 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')
Exception, что я получаю говорит это - SyntaxError: keyword can't be an expression (<console>, line 1)
Как это сделать?
Извините, правила компании. Спасибо, это решило проблему! Итак, django разделяет часть LHS на '__' и использует ее как поля? –
Да, в значительной степени, хотя, естественно, это сложнее, чем из-за необходимости отличать соединения от типа поиска ('in',' istartswith' и т. Д.). Если вам интересно, посмотрите код в 'django.db.models.sql.query.Query.add_filter'. –