在我的模型中,您可以看到我有一个与UserProfile具有OneToOne关系的SpecializedProfile,与django用户模型具有OneToOne关系。在
我想为包含UserProfile和django用户模型内联的SpecializedProfile创建一个管理员,这样我就可以一次创建一个SpecializedProfile,而不需要转到UserProfile页面和User页面。在
这是我的模型:
class UserProfile(models.Model):
user_auth = models.OneToOneField(User, related_name="profile", primary_key=True)
# more fields...
class SpecializedProfile(models.Model):
profile = models.OneToOneField(UserProfile, related_name="specialized_profile", primary_key=True)
# More fields...
下面是我创建管理员的尝试:
^{pr2}$管理员不工作,我收到以下错误:
<class 'profiles.admin.ProfileInline'>: (admin.E202) 'profiles.UserProfile' has no field named 'trainer'.
<class 'profiles.admin.UserInline'>: (admin.E202) 'auth.User' has no ForeignKey to 'profiles.SpecializedProfile'.
似乎django希望inlines位于定义OneToOne字段的模型上,并且不接受反向关系。我宁愿不去重组我的模型来实现这个目标。。。有什么我可以做的,使内联工作与我的模型一样?在
github上有一个django模块可以为您完成此操作,而不必反转关系:django_reverse_admin。在
一旦安装,您的管理员将如下所示:
不幸的是,我不认为它可以实现嵌套内联(Django也不能),所以这只能解决部分问题。我知道您不想更改数据库结构,但SpecializedProfile看起来更像是UserProfile的一个子类。如果您像这样重写模型:
^{2}$然后你可以让管理员这样:
这样,您就可以内联地查看UserProfile和SpecializedProfile的所有内容。在
我修复了这个错误,使反向内联,不是从配置文件到用户,而是从重写的用户到配置文件:
然后我还调整了配置文件管理(删除了添加操作,并将一些字段链接改为自定义链接)。在
在
django.contrib.admin
中没有nested inlines (inline inside inline)
。在也许这对你有帮助:
您还需要提供自己的模板,这些模板将在顶层内联和子级内联上进行嵌套迭代。在
再看看this,也许能帮到你。在
相关问题 更多 >
编程相关推荐