我需要实现的功能时,只有一个用户的用户模型可以有'编辑器角色',我将使用这个常数在我的drf API。所以我需要创建一个django常量,只有一个用户id,并在django管理面板中创建所有用户的下拉菜单。我该怎么做?还有其他想法如何实现此功能吗?我选择了django-constant,但面临着模型数据列表无法在设置py中初始化的问题:
CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend'
CONSTANCE_ADDITIONAL_FIELDS = {
'users_select': ['django.forms.fields.ChoiceField', {
'widget': 'django.forms.Select',
'choices': (
(None, "-----"),
User.objects.all().split(","))
)
}],
}
CONSTANCE_CONFIG = {
'DEFAULT_USER': ('', 'default user', 'users_select'),
}
UPD我决定使用json文件的列表,但仍然不确定它的最佳结果。也许我会找到更好的设计
def users_list():
f = open('apps/users/data.json')
data = json.load(f)
result = ((user['id'], user['full_name']) for user in data)
f.close()
return tuple(result)
CONSTANCE_ADDITIONAL_FIELDS = {
'user_select': ['django.forms.fields.ChoiceField', {
'widget': 'django.forms.Select',
'choices': (
(None, "-----"),
) + users_list()
}],
}
1条答案
按热度按时间ny6fqffe1#
如果你想实现只有一个用户可以拥有“编辑角色”的功能,你可以不使用像
django-constance
这样的Django包来实现。相反,您可以使用Django的内置模型和管理面板来管理用户角色和限制。以下是你可以如何处理它:1.将
BooleanField
添加到User模型:在User模型中,添加BooleanField
以指示用户是否具有'editor-role'
。例如:1.将编辑器角色限制为仅一个用户:要确保只有一个用户拥有
'editor-role'
,可以重写User模型的save()
方法来强制执行此限制。下面是一个例子:在此代码中,当使用
is_editor=True
保存用户时,它首先将所有使用is_editor=True
的用户更新为is_editor=False
。这确保在任何给定时间只有一个用户可以拥有'editor-role'
。1.使用Django管理面板管理用户角色:通过以上设置,您可以使用Django管理面板为用户管理
'editor-role'
。您可以为User模型创建一个自定义管理表单,以显示一个下拉菜单,用于选择'editor-role'
用户。下面是一个例子:在这段代码中,我们创建了一个自定义表单
UserChangeForm
,它用下拉菜单替换了is_editor
字段的默认小部件。下拉菜单提供'Yes'
和'No'
选项,以选择'editor-role'
用户。通过这些修改,您可以在Django管理面板中为用户管理
'editor-role'
,而不需要像django-constance
这样的额外包。