我不太清楚我要问的问题该如何措辞。假设有两个profile对象可能与一个用户关联。其中只有一个是关联的(有一对一的映射),但它可能是两个可能的profile对象之一。我的管理代码如下:
admin.site.unregister(User)
class AProfileInline(admin.StackedInline):
model = UserProfileA
class BProfileInline(admin.StackedInline):
model = UserProfileB
class UserProfileAdmin(UserAdmin):
inlines = [AProfileInline, BProfileInline, ]
admin.site.register(User, UserProfileAdmin)
这可以正常工作,但它当然会显示不必要的信息。如果管理页面只显示正确的内联,那就太好了。我想这很复杂,可能是个问题,如果我想从一个配置文件类型更改为另一个配置文件类型。有什么想法吗?在
这是一种方法。记住,这是一次黑客攻击。我基于
ModelAdmin
中的ModelAdmin
代码。在此解决方案假设}通过一个名为
UserProfileA
和{user
的字段与User
有外键关系。在change_view
和delete_view
函数调用get_object
,因此在呈现这些视图之前,这段代码应该正确地替换内联表单实例。在此代码重写
get_object
以执行以下额外操作:UserProfileA
(通过user
字段)的UserProfileA
,则添加UserProfileA
的内联表单。在UserProfileB
(通过user
字段)的UserProfileB
引用当前UserProfileB
的内联表单。在此解决方案的怪癖:
UserProfileAdmin.__init__
仍将创建self.inline_instances
的默认版本,该版本将在使用change_view
或{UserProfileAdmin.get_object
,则将不必要地重新计算内联表单。在相关问题 更多 >
编程相关推荐