Aynı model için birden fazla ModelAdmin'i nasıl oluşturabilirim, her biri farklı şekilde farklı ve farklı URL'lere bağlı mı?Çoklu ModelAdmins/görünümler aynı modelde Django admin
Diyelim ki Mesajlar adlı bir Django modelim var. Varsayılan olarak, bu modelin yönetici görünümü tüm Mesaj nesnelerini listeler.
ben list_display gibi değişkenleri ayarlamak veya şöyle benim ModelAdmin içinde queryset
yöntemi geçersiz kılarak çeşitli şekillerde sayfada görüntülenen nesnelerin listesini özelleştirebilirsiniz biliyorum: Varsayılan olarak
class MyPostAdmin(admin.ModelAdmin):
list_display = ('title', 'pub_date')
def queryset(self, request):
request_user = request.user
return Post.objects.filter(author=request_user)
admin.site.register(MyPostAdmin, Post)
, bu erişilebilir olacaktır URL /admin/myapp/post
adresinde. Ancak aynı modele ait birden çok görünüm/ModelAdmins'e sahip olmak istiyorum. /admin/myapp/post
, tüm posta nesnelerini listeleyecek ve /admin/myapp/myposts
, kullanıcıya ait tüm yayınları listeleyecek ve /admin/myapp/draftpost
, henüz yayınlanmamış olan tüm yayınları listeleyebilir. (bunlar sadece örneklerdir, benim gerçek kullanım durumum daha karmaşıktır)
Aynı modele birden fazla ModelAdmin kaydedemezsiniz (bu sonuç bir AlreadyRegistered
istisnası). İdeal olarak, no'lu bu 'u her şeyi tek bir ModelAdmin sınıfına sokmadan ve URL'ye bağlı olarak farklı bir sorgulama döndürmek için kendi 'urls' işlevlerimi yazmayı istiyorum.
Django kaynağına bir göz attım ve bir şekilde urls.py'de yer alan ModelAdmin.changelist_view
gibi işlevler görüyorum, ancak bunun nasıl çalışacağından tam olarak emin değilim.
Güncelleştirme: İstediğimi yapmanın bir yolunu buldum (aşağıya bakın), ancak bunu yapmanın başka yollarını hala duymak isterim.
Bu harika. Yönetici sitede bir proxy modelinin kayıtlı olabileceğinin farkında değildim. Bu aslında bana çok yardımcı olacak. –
Aynı modelleri django yöneticisinde iki kez kaydetmem gerekiyor ve proxy modelleri çalışıyor gibi görünüyor. Ancak izin sistemi ile ilgili bir problem buldum. Ayrıca bkz: http://code.djangoproject.com/ticket/11154 – bjunix
Ayrıca, ModelAdmin queryset yerine varsayılan yöneticiyi değiştirmek için iyi bir fikir. Bu nedenle, proxy modelinin davranışı, yöneticinin dışında bile tutarlı olur. – bjunix