我知道这个问题已经被问过不止一次了,但是由于Django正在开发新的版本,我将再次问这个问题:
我使用的是模型用户(Django用户,而不是在我的models.py中),并使用用户的外键创建另一个模型。
models.py:
class Plan(models.Model):
user = models.ForeignKey(User)通过在Plan中这样做,我可以简单地显示用户中的每个admin.py:
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')我希望能够看到每个Plan的所有Plan。到目前为止,不可能在Django管理中嵌套行内嵌(如果不编辑HTML,我想避免):
User
-> Plan 1
-> Order 1
-> Order 2
-> Plan 2
-> Order 3因此,我的想法是在User Admin only A链接中显示每个计划,到页面编辑Plans,并将Orders作为内联:
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]但是它不起作用(而且我没有日志或错误)。
有没有办法干净利落地这样做?
发布于 2014-08-04 15:47:25
我建议添加一个自定义PlanInline方法,返回链接并查看它是否有用。类似于这样的东西:
from django.utils.safestring import mark_safe
from django.core.urlresolvers import reverse
class PlanInline(TabularInline):
model = Plan
readonly_fields = ('change_link',)
...other options here...
def change_link(self, obj):
return mark_safe('<a href="%s">Full edit</a>' % \
reverse('admin:myapp_plan_change',
args=(obj.id,)))基本上,我们在这里要做的就是创建一个自定义方法,它返回到变更页面的链接(这个特定的实现没有测试,如果有任何解析错误,很抱歉,但是您得到了这个想法),然后将它添加到readonly_fields中,如下所述:fields
change_link方法的几个注意事项:您需要用实际的应用程序名替换视图名称中的'myapp‘。mark_safe方法只是将文本标记为模板引擎将其呈现为html的安全。
发布于 2017-11-09 07:20:04
https://stackoverflow.com/questions/25120208
复制相似问题