Làm cách nào tôi có thể tạo nhiều ModelAdmin cho cùng một mô hình, mỗi mô hình được tùy chỉnh khác nhau và được liên kết với các URL khác nhau?
Hãy nói rằng tôi có một mô hình Django được gọi là Bài viết. Theo mặc định, chế độ xem quản trị của mô hình này sẽ liệt kê tất cả các đối tượng Đăng.
Tôi biết tôi có thể tùy chỉnh danh sách các đối tượng được hiển thị trên trang theo nhiều cách khác nhau bằng cách đặt các biến như list_display hoặc ghi đè queryset
phương thức trong ModelAdmin của tôi như vậy:
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)
Theo mặc định, điều này sẽ có thể truy cập tại URL /admin/myapp/post
. Tuy nhiên, tôi muốn có nhiều lượt xem / ModelAdmins của cùng một mô hình. ví dụ: /admin/myapp/post
sẽ liệt kê tất cả các đối tượng bài đăng và /admin/myapp/myposts
sẽ liệt kê tất cả các bài đăng thuộc về người dùng và /admin/myapp/draftpost
có thể liệt kê tất cả các bài đăng chưa được xuất bản. (đây chỉ là ví dụ, trường hợp sử dụng thực tế của tôi phức tạp hơn)
Bạn không thể đăng ký nhiều ModelAdmin cho cùng một mô hình (điều này dẫn đến một AlreadyRegistered
ngoại lệ). Lý tưởng nhất là tôi muốn đạt được điều này mà không cần đặt mọi thứ vào một lớp ModelAdmin duy nhất và viết hàm 'url' của riêng tôi để trả về một bộ truy vấn khác tùy thuộc vào URL.
Tôi đã xem qua nguồn Django và tôi thấy các chức năng như thế ModelAdmin.changelist_view
có thể được bao gồm trong urls.py của tôi, nhưng tôi không chắc chính xác nó sẽ hoạt động như thế nào.
Cập nhật : Tôi đã tìm thấy một cách để làm những gì tôi muốn (xem bên dưới), nhưng tôi vẫn muốn nghe những cách khác để làm điều này.