代码之家  ›  专栏  ›  技术社区  ›  Srikar Appalaraju Tonetel

Django模型外键字段匹配

  •  0
  • Srikar Appalaraju Tonetel  · 技术社区  · 14 年前

    我有以下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 回复  |  直到 11 年前
        1
  •  2
  •   Daniel Roseman    14 年前

    我希望你用的是正确的字段名,而不是X,Y和M-这真的很难理解。

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

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

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