Djangoで同じモデルのフィールド同士によるフィルタを実行する方法

2010-03-18
このエントリーをはてなブックマークに追加

例えば

class Person(models.Model):
name = models.CharField(max_length=100)
nickname= models.CharField(max_length=100)

みたいなモデルがあって、「名前とニックネームがおんなじ人を抽出したい」っていうケースがあるとします。

_person = Person.objects.filter(name=nickname)

はNGですね、エラーがでます。「nicknameは宣言されてません」となります。そこで、

from django.db.models import F

_person = Person.objects.filter(name=F(‘nickname’))

と書きます。フィールドを値として展開してくれるみたいですね。site-packagesdjangodbmodelsexpressions.pyにソースもあるので、きちんと調べればいい感じに使えそうです。

Python2.5、Django1.1.1でのお話でした。

Tags: ,