Django 用户:获取组列表,或如何将 MultipleChoiceField 转换为 ChoiceField

hol*_*lms 2 python django

我搜索过类似的主题但没有找到我需要的..

我用 UserAttributes 模型扩展了 Users 模型,添加了一些附加字段等等。现在我正在尝试使 ModelForm 出来。所以我在这里遇到了一些问题。

我想将组列为 ChoiceField 而不是 MultipleChoiceField。这是规范的要求,因此必须如此。

所以这是代码..

from django.forms               import ModelForm
from django.contrib.auth.models import User
from helpdesk.models.userattributes      import *
from django.utils.translation import ugettext as _

class SettingsOperatorsForm(ModelForm):


    groups = forms.ChoiceField(
        label=_(u'Rights'),
        required=True,
        choices=["what's in here?"]
    )

    class Meta:
        model   = UserAttributes
        fields  = ('first_name', 'last_name', 'job_title', 'email', 'password', 'is_active', 'groups'  )
Run Code Online (Sandbox Code Playgroud)

数据库中有 auth_group 表,所以我尝试将其设置为这样,但我根本没有显示任何表单:

from django.contrib.auth.models import User, Group

groups = forms.ChoiceField(
    label=_(u'Rights'),
    required=True,
    choices=Group.objects.all()
)
Run Code Online (Sandbox Code Playgroud)

我认为最好将 multipleChoiceField 转换为 ChoiceField

简单来说:

替代文本

应该变成只是选择框。

Dan*_*man 5

正如您在答案中所做的那样,在表单定义时设置选择将意味着表单永远不会看到任何已定义的新组。

您应该使用带有查询集参数的 ModelChoiceField,而不是使用带有列表理解的 ChoiceField:

groups = forms.ModelChoiceField(queryset=Group.objects.all())
Run Code Online (Sandbox Code Playgroud)