【发布时间】:2016-04-08 20:31:11
【问题描述】:
如何使UserProfile 的ManyToMany 属性(其属性user = OneToOne(User) 在Django-Admin 中可见?
所以有一个常见的User 模型用于登录/注册。这个User 模型通过在UserProfile 模型中使用OneToOneField(User,related_name='userprofile') 进行了扩展。
UserProfile 具有ManyToManyField 属性:
languages = models.ManyToManyField(Language, through='UserProfileLanguage')
这就是问题所在。
我在Django-Admin 的User 选项卡中看不到languages。
我可以在User 选项卡中看到所有UserProfile 属性,因为我这样做了:
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'User_Profile'
class UserAdmin(BaseUserAdmin):
inlines = (UserProfileInline, )
但我在User 选项卡中看不到的UserProfile 的唯一属性是languages。我读过这可能是因为它是ManyToManyField,但我不知道如何将它放在User 选项卡中。
我试图把它作为一个内联模型,但它引发了错误:
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'User_Profile'
class UserProfileLanguageLevelInline(admin.TabularInline):
model = UserProfileLanguage
# THIS DOES NOT WORK EITHER: model = User.userprofile.languages.through
class UserAdmin(BaseUserAdmin):
inlines = (UserProfileInline, UserProfileLanguageLevelInline)
<class 'SolutionsForLanguagesApp.admin.UserProfileLanguageLevelInline'>: (admin.
E202) 'SolutionsForLanguagesApp.UserProfileLanguage' has no ForeignKey to 'auth.
User'.
这是因为languages 是UserProfile 的属性,而不是User,但我不知道如何解决。
【问题讨论】:
标签: python django django-models django-admin