外部キーのプロパティによって管理チェンジリストにフィルターを追加したいのですが、.
class Address(model.Models):
street = models.CharField(max_length=25)
city = models.CharField(max_length=25)
country = models.CharField(max_length=25)
class Customer(models.Model):
name = models.CharField(max_length=25)
address = models.ForeignKey(Address)
顧客管理チェンジリストで、都市と国ごとにフィルターを表示したいとします(したがって、特定の国または都市のすべての顧客を表示します)。
ただし、標準のlist_filter()機能では、モデル上で直接フィールドによるフィルタリングのみが許可され、外部キーでは許可されないようです。私はもう試した:
list_filter = ("address__country",)
または
list_filter = ("address.country",)
しかし、私はいつも同じタイプのエラーを受け取ります:
'address__country' is not a callable or an attribute
任意の提案を歓迎します。 FKプロパティのフィルタリングを可能にする特別な命名規則/構文はありますか?
https://code.djangoproject.com/ticket/34 を参照してください。 Django 1.3 :)で問題なく動作します
class Room(models.Model):
house = models.ForeignKey(House)
def __unicode__(self):
return self.house.town.name
class Booking(models.Model):
room = models.ForeignKey(Room)
def __unicode__(self):
return self.room.house.town.name
class BookingOpts(admin.ModelAdmin):
list_filter = ('room__house__town',)
raw_id_admin = ('room', )
admin.site.register(Town)
admin.site.register(House)
admin.site.register(Room)
admin.site.register(Booking, BookingOpts)
私は次の解決策を見つけてテストしました:
http://www.djangosnippets.org/snippets/1911/
ForeignKeysでは機能しますが、ManyToManyリレーションでは機能しません。
私は同じ問題に遭遇し、本当に解決策が必要でした。 FK関連のモデルプロパティにフィルターを作成できる回避策があります。複数のFK関係をトラバースすることもできます。これは、ForeignKeyフィールドにフィルターを与えるために使用されるデフォルトのRelatedFilterSpecをサブクラス化する新しいFilterSpecサブクラスを作成します。
http://djangosnippets.org/snippets/2260/ を参照してください