0

我有以下 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)

这个怎么做?

4

1 回答 1

2

我希望您使用正确的字段名称而不是 X、Y 和 M——这真的很难理解。

但无论如何,您应该始终使用双下划线语法来遵循过滤表达式左侧的关系:

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

(这样做的技术原因是参数filter实际上是函数的关键字参数,所以它的左侧必须是字符串而不是表达式。)

于 2010-11-22T10:45:43.703 回答