Django - ウェブアプリケーションフレームワーク

djangoのリレーションオブジェクトで __contains が使えないorz

とりあえずメモ。 これは指定の仕方が悪い。 リレーションオブジェクトはpkを渡しているので、 それに対し __contains しなければならない。

以下の例を見てほしい。

bts/models.py:

class Typ(models.Model):
    name = models.CharField(max_length=0xff, unique=True)

class Ticket(models.Model):
    typ = models.ManyToManyField(Typ)

この例ではTicketクラスのtyp属性がTypクラスのリレーションである。 Typ.name属性が “BUG” のTypオブジェクトをリレーションに含む Ticketオブジェクトを取得するためにはTicket.typ.pkに対して __contains しなければならない。

# manage.py shell
>>> from bts.models import Typ, Ticket
>>> typ = Typ.objects.get(name=name)
>>> Ticket.objects.filter(typ__pk__contains=typ)

このようにしなければdjangoからエラーが通知されます。

以下はダメな例。

# manage.py shell
>>> from bts.models import Typ, Ticket
>>> typ = Typ.objects.get(name=name)
>>> Ticket.objects.filter(typ__contains=typ)

目次

前のトピックへ

boto

次のトピックへ

ftputil

このページ

inserted by FC2 system