Her biri farklı şekilde özelleştirilmiş ve farklı URL'lere bağlı olan aynı model için birden fazla ModelAdmin nasıl oluşturabilirim?
Diyelim Gönderiler adlı bir Django modelim var. Varsayılan olarak, bu modelin yönetici görünümünde tüm Post nesneleri listelenir.
List_display gibi değişkenleri ayarlayarak veya queryset
benim ModelAdmin yöntemini geçersiz kılmak gibi sayfada görüntülenen nesnelerin listesini özelleştirebilirsiniz biliyorum :
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)
Varsayılan olarak, URL'den erişilebilir /admin/myapp/post
. Ancak aynı modelin birden fazla görünüm / ModelAdmins olmasını istiyorum. örneğin /admin/myapp/post
tüm yayın nesnelerini /admin/myapp/myposts
listeler ve kullanıcıya ait /admin/myapp/draftpost
tüm yayınları listeler ve henüz yayınlanmamış tüm yayınları listeleyebilir. (bunlar sadece örnektir, gerçek kullanım durumum daha karmaşıktır)
Aynı model için birden fazla ModelAdmin kaydedemezsiniz (bu bir AlreadyRegistered
istisnayla sonuçlanır ). İdeal olarak bunu başarmak istiyorum olmadan tek ModelAdmin sınıfa şeyi koyarak ve URL'ye bağlı olarak farklı bir Sorgu Kümesi dönmek için kendi 'URL'leri' işlevini yazma.
Django kaynağına bir göz attım ve aşağıdaki gibi fonksiyonları görüyorum ModelAdmin.changelist_view
şekilde benim urls.py içine dahil olabilir , ama tam olarak nasıl çalışacağından emin değilim.
Güncelleme : İstediğimi yapmanın bir yolunu buldum (aşağıya bakın), ama yine de bunu yapmanın başka yollarını duymak isterim.