我知道这个问题已经被问了很多次,但是随着Django不断更新新版本,我会再次提出这个问题:
我正在使用模型User(Django User,不在我的models.py中),并创建另一个与User相关联的模型。
models.py
:
class Plan(models.Model):
user = models.ForeignKey(User)
我可以通过在admin.py
中添加以下代码,简单地显示我的用户中的每个Plan
:
class PlanInline(admin.TabularInline):
model = Plan
extra = 0
class MyUserAdmin(UserAdmin):
ordering = ('-date_joined', 'username')
inlines = [PlanInline,]
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
但事情将变得更加棘手。我希望添加一个模型,它具有指向 Plan
的外键:
class Order(models.Model):
plan = models.ForeignKey('Plan')
我希望能够查看每个计划
的所有订单
。截至今天,在Django管理界面中无法嵌套内联(除非编辑HTML,但我想避免这种情况):
User
-> Plan 1
-> Order 1
-> Order 2
-> Plan 2
-> Order 3
所以我的想法是在“用户管理”中只显示每个计划的链接,指向编辑“计划”的页面,并将“订单”作为内联显示:
class OrderInline(admin.TabularInline):
model = Order
extra = 0
class PlanAdmin(admin.ModelAdmin):
inlines = [OrderInline,]
admin.site.register(Plan, PlanAdmin)
问题是,我如何在用户管理中显示一个计划的链接?
class MyUserAdmin(UserAdmin):
ordering = ('-date_joined', 'username')
??? LINK ????
我看到了一些关于这个主题的解决方案:Django InlineModelAdmin: Show partially an inline model and link to the complete model,但它们有点“不干净”,因为它们要求我们在代码中编写HTML和绝对路径。
然后我看到了Djangoproject上的这个票:https://code.djangoproject.com/ticket/13163。它似乎正是我要找的,而且这个票已经“修复”了。所以我尝试添加像修复程序中的show_change_link = True
一样的内容:
class PlanInline(admin.TabularInline):
model = Plan
extra = 0
show_change_link = True
class MyUserAdmin(UserAdmin):
ordering = ('-date_joined', 'username')
show_change_link = True
inlines = [UserProfileInline, PlanInline]
但是它没有起作用(我也没有日志或错误信息)。
有没有一种干净的方法可以做到这一点?