我有以下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)
怎么做?
答案 0 :(得分:2)
我希望您使用了正确的字段名称而不是X,Y和M - 这很难遵循。
但无论如何,你应该总是使用双下划线语法来跟踪过滤器表达式左侧的关系:
XX.objects.filter(y__disp_name__istartswith='string')
(技术原因是filter
的参数实际上是函数的关键字参数,因此它的左侧必须是字符串而不是表达式。)