Django模型外键场匹配

时间:2010-11-22 10:41:27

标签: python django django-models string-matching

我有以下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 个答案:

答案 0 :(得分:2)

我希望您使用了正确的字段名称而不是X,Y和M - 这很难遵循。

但无论如何,你应该总是使用双下划线语法来跟踪过滤器表达式左侧的关系:

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

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

相关问题