如何在用户管理选项卡(Django-Admin)中从UserProfile中显示ManyToManyField

时间:2016-04-08 20:31:12

标签: python django django-models django-admin

如何制作ManyToMany的{​​{1}}属性(UserProfile中可见user = OneToOne(User)属性?

因此我使用了一个常用的Django-Admin模型来登录/注册。使用User模型中的User扩展了此OneToOneField(User,related_name='userprofile')模型。

UserProfileUserProfile属性:

ManyToManyField

这就是问题所在。

我在languages = models.ManyToManyField(Language, through='UserProfileLanguage')的{​​{1}}标签中看不到languages。 我可以在User标签中看到所有Django-Admin属性,因为我这样做了:

UserProfile

但我User标签中只能看到class UserProfileInline(admin.StackedInline): model = UserProfile can_delete = False verbose_name_plural = 'User_Profile' class UserAdmin(BaseUserAdmin): inlines = (UserProfileInline, ) 的{​​{1}}属性UserProfile。我已经知道这可能是因为它User但我无法找到如何将其放入languages标签中。

我试图将其作为内联模型,但它会引发错误:

ManyToManyField

这是因为Userclass 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。知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

在您的情况下,如果您看到languages但未编辑User标签中的字段,请使用readonly_fields

class UserProfileInline(admin.StackedInline):
    model = UserProfile
    can_delete = False
    verbose_name_plural = 'User_Profile'
    readonly_fields = ('languages',)

class UserAdmin(BaseUserAdmin):
    inlines = (UserProfileInline, )