Django模型外键字段匹配
我有一个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
我希望你能用合适的字段名称,而不是用X、Y和M,这样真的很难理解。
不过无论如何,你在过滤表达式的左边总是应该使用双下划线的写法来表示关系:
XX.objects.filter(y__disp_name__istartswith='string')
(这样做的技术原因是,filter
的参数实际上是一个函数的关键字参数,所以左边的部分必须是一个字符串,而不能是其他表达式。)