web-dev-qa-db-ja.com

Django外部キープロパティの管理フィルター

外部キーのプロパティによって管理チェンジリストにフィルターを追加したいのですが、.

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プロパティのフィルタリングを可能にする特別な命名規則/構文はありますか?

26

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)
20
luc

私は次の解決策を見つけてテストしました:

http://www.djangosnippets.org/snippets/1911/

ForeignKeysでは機能しますが、ManyToManyリレーションでは機能しません。

1
Dominik Szopa

私は同じ問題に遭遇し、本当に解決策が必要でした。 FK関連のモデルプロパティにフィルターを作成できる回避策があります。複数のFK関係をトラバースすることもできます。これは、ForeignKeyフィールドにフィルターを与えるために使用されるデフォルトのRelatedFilterSpecをサブクラス化する新しいFilterSpecサブクラスを作成します。

http://djangosnippets.org/snippets/2260/ を参照してください

0
OverClocked