ฉันจะสร้างมากกว่าหนึ่ง ModelAdmin สำหรับรุ่นเดียวกันโดยแต่ละแบบกำหนดเองแตกต่างกันและเชื่อมโยงกับ URL ที่แตกต่างกันอย่างไร
สมมติว่าฉันมีรุ่น Django ชื่อกระทู้ ตามค่าเริ่มต้นมุมมองผู้ดูแลระบบของรุ่นนี้จะแสดงรายการวัตถุโพสต์ทั้งหมด
ฉันรู้ว่าฉันสามารถปรับแต่งรายการของวัตถุที่แสดงบนหน้าในรูปแบบต่างๆโดยการตั้งค่าตัวแปรเช่น list_display หรือแทนที่queryset
วิธีการใน ModelAdmin ของฉันเช่น:
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)
โดยค่าเริ่มต้นนี้จะสามารถเข้าถึงได้ที่ /admin/myapp/post
URL อย่างไรก็ตามฉันต้องการมีหลายมุมมอง / ModelAdmins ของโมเดลเดียวกัน เช่น/admin/myapp/post
จะแสดงรายการออบเจกต์ทั้งหมดและ/admin/myapp/myposts
จะแสดงรายการโพสต์ทั้งหมดที่เป็นของผู้ใช้และ/admin/myapp/draftpost
อาจแสดงรายการโพสต์ทั้งหมดที่ยังไม่ได้เผยแพร่ (นี่เป็นเพียงตัวอย่างกรณีการใช้จริงของฉันซับซ้อนกว่า)
คุณไม่สามารถลงทะเบียนมากกว่าหนึ่ง ModelAdmin สำหรับรุ่นเดียวกัน (ผลลัพธ์นี้มีAlreadyRegistered
ข้อยกเว้น) เป็นการดีที่ฉันจะทำสิ่งนี้ให้สำเร็จโดยไม่ต้องใส่ทุกอย่างไว้ใน ClassAdmin ชั้นเดียวและเขียนฟังก์ชั่น 'urls' ของตัวเองเพื่อส่งคืนชุดสืบค้นที่แตกต่างกันขึ้นอยู่กับ URL
ฉันเคยดูที่ Django แล้วและฉันเห็นฟังก์ชั่นอย่างModelAdmin.changelist_view
นั้นอาจรวมอยู่ใน urls.py ของฉัน แต่ฉันไม่แน่ใจว่ามันจะทำงานอย่างไร
อัปเดต : ฉันพบวิธีหนึ่งในการทำสิ่งที่ฉันต้องการ (ดูด้านล่าง) แต่ฉันยังอยากได้ยินวิธีการอื่นในการทำเช่นนี้