Django模型外键字段匹配

0 投票
1 回答
2770 浏览
提问于 2025-04-16 07:26

我有一个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')

但是这里MModel 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的参数实际上是一个函数的关键字参数,所以左边的部分必须是一个字符串,而不能是其他表达式。)

撰写回答