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)

XXこれで、views.pyで、フィールド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 に答える