2013-07-26 254 views
1

我有一個模型的多個實例,每個實例都有一個相關的電子郵件地址。但是,有幾個實例具有相同的連接電子郵件地址,但是當我將filter['email']放入我的admin.py時,我會收到實例電子郵件的一長串列表,即多個相同電子郵件的多個副本。Django管理員過濾器

有沒有一種方法可以刪除多次列出的電子郵件?或者將過濾器視圖定製爲更好的方法? (下拉菜單也許?)

我目前沒有ManyToManyField關係,或類似的東西。我的數據庫中只有nameemail的實例。我的models.py如下:

import ldapdb.models 
from ldapdb.models.fields import CharField, IntegerField, ListField 

class Item(ldapdb.models.Model): 
    item = CharField(db_column='item', max_length=30, primary_key=True, unique=True) 
    email = CharField(db_column='mail', max_length=20) 

我的admin.py看起來像這樣:

from items.models import Item 
from django.contrib import admin 

class ItemAdmin(admin.ModelAdmin): 
    readonly_fields = ('email',) 
    list_display = ('item', 'email') 
    list_filter = ['email'] 
    search_fields = ['item'] 

admin.site.register(Item, ItemAdmin) 

很顯然,我一直在尋找https://docs.djangoproject.com/en/1.3/ref/contrib/admin/,但我實在看不出太大的方式定製我的管理員過濾器視圖。

回答

1

你可以發佈一些你的代碼嗎?我並不完全確定自己瞭解實例與電子郵件之間的關係 - 是電子郵件字段嗎?一個ForeighKey到不同的模型?如果它不是ManyToMany或類似的關係,它有多於一個?以及如何在管理員中完成過濾?

編輯 好了,現在我明白了這個問題。你想要的是不可能的。請參閱django管理網站,他們是同一封電子郵件並不重要,因爲它仍然是一個不同的對象。如果沒有指定該字段是唯一的或者與管理站點代碼混淆,則沒有辦法解決這個問題。

更好的解決方案是將電子郵件配置爲可在管理員模型中搜索,然後在您搜索電子郵件[email protected]時將它帶回所有匹配。

另一個好的解決方案是使電子郵件成爲不同的模型,並通過ManyToMany關係將其鏈接到Item模型。然後,您使用一種方法創建EmailAdmin,向您顯示每封電子郵件的所有相關項目。

這一切都取決於你實際需要什麼。最終,您可能需要編寫自己的視圖或管理網站,以便將其修改爲您所需的內容。

此外,您可能需要將電子郵件從CharField更改爲EmailField。希望這可以幫助!

+0

首先我的數據庫在LDAP中,因此沒有'ForeignKey'可用的東西。我的數據庫只有很多帶有「name」和「email」字段的對象,並且很多對象只有相同的電子郵件關聯。 在管理員中,我已經包含行'list_filter = ['pub_date']'....等管理頁面的RHS,只是實例的電子郵件的長列表...包括多個副本同一個。 – user2564502

+0

那有什麼問題?你自己說過一些電子郵件會重複自己,所以你有理由不止一次地看到它。我真的建議你發佈一些你的代碼,所以我可以更好地理解你正在使用的問題 – yuvi

+0

我很感謝你試圖幫助我,但我不明白你想看到哪些代碼會幫助你。 models.py本身? (這只是定義名稱和電子郵件)。 admin.py只是一個帶有'list_filter = ['email']'' – user2564502