Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在用户管理选项卡(Django admin)中的用户配置文件中使ManyToManyField可见_Python_Django_Django Models_Django Admin - Fatal编程技术网

Python 如何在用户管理选项卡(Django admin)中的用户配置文件中使ManyToManyField可见

Python 如何在用户管理选项卡(Django admin)中的用户配置文件中使ManyToManyField可见,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,如何使UserProfile的manytomy属性(其属性user=OneToOne(user)在Django Admin中可见) 因此,我使用一个常见的用户模型来登录/注册。这个用户模型通过在userprofile模型中使用OneToOneField(User,related_name='userprofile')进行扩展 UserProfile具有ManyToManyField属性: languages=models.ManyToManyField(语言,通过='UserProfileLan

如何使
UserProfile
manytomy
属性(其属性
user=OneToOne(user)
Django Admin
中可见)

因此,我使用一个常见的
用户
模型来登录/注册。这个
用户
模型通过在
userprofile
模型中使用
OneToOneField(User,related_name='userprofile')
进行扩展

UserProfile
具有
ManyToManyField
属性:

languages=models.ManyToManyField(语言,通过='UserProfileLanguage')

这就是问题所在

我在
Django Admin
User
选项卡中看不到
语言
。 我可以在
User
选项卡中看到所有
UserProfile
属性,因为我这样做了:

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

class UserAdmin(BaseUserAdmin):
    inlines = (UserProfileInline, )
但是
UserProfile
的唯一属性是
User
选项卡中看不到的
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'.
class UserProfileInline(admin.StackedInline):
model=UserProfile
can_delete=False
详细名称复数='User\u Profile'
类UserProfileLanguageLevelInline(管理列表行):
model=UserProfileLanguage
#这也不起作用:model=User.userprofile.languages.through
类UserAdmin(BaseUserAdmin):
inlines=(UserProfileInline,UserProfileLanguageLevelInline)
:(行政。
E202)“SolutionsForLanguagesApp.UserProfileLanguage”没有“auth”的外键。
用户'。

这是因为
languages
UserProfile
的一个属性,而不是
User
,但我不知道如何解决这个问题。

在您的情况下,如果您可以查看
语言
,但不编辑
用户
选项卡中的字段,则应使用
只读字段

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

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

谢谢Javier,如果我能更改语言和级别,那就最好了。这可以让它在Userprofile选项卡中工作,但不能在User选项卡中这样工作。你知道该怎么做吗?非常感谢你。我想,在你的第一个例子中,原因是
通过class='UserProfileLanguage'
创建一个中间表
应用程序_userprofile\u languages
更容易进行ORM筛选,但无法理解数据为何未公开或没有任何警告。因此,如果您不通过
使用
,您可以看到
语言
。在第二个示例中,当您
管理站点.register(用户,用户管理员)时
model
UserProfileLanguage
没有FK to
User
,如果您确实显示了该表中的字段。我希望解释一下,如果其他人可以帮助理解这一点。