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

Python Django用户:获取组列表,或者如何将multipleEchoiceField转换为ChoiceField,python,django,Python,Django,我搜索过类似的主题,但没有找到我需要的 我用UserAttributes模型扩展了用户模型,添加了一些附加字段等等。。现在我正试着做一个模型。。所以我这里有个小问题 我想将组列为ChoiceField,而不是MultipleChiiceField。。这是规范的要求,所以必须如此 这是代码 from django.forms import ModelForm from django.contrib.auth.models import User from helpdes

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

我用UserAttributes模型扩展了用户模型,添加了一些附加字段等等。。现在我正试着做一个模型。。所以我这里有个小问题

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

这是代码

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'  )
数据库中有一个auth_group表,所以我试着这样做,但我没有显示任何表单:

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

groups = forms.ChoiceField(
    label=_(u'Rights'),
    required=True,
    choices=Group.objects.all()
)
我认为最好是将MultipleChiceField转换为ChoiceField

坦率地说:


应该变成只是选择框。

只是一个反馈,因为2小时没有答案,所以请转到freenode django=

可以覆盖元类中任何字段的小部件,如下所示:

from django.forms import ModelForm

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        widgets = { 'groups': forms.Select(),}
不起作用

forms.ChoiceField也是。。没有什么变化。。仍显示多选选择

更新

这很有效。。没关系,但是,为什么该死的小部件覆盖不起作用

决心
因为我有django 1.1=我的愚蠢..

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

您不应使用带有列表理解的ChoiceField进行选择,而应使用带有queryset参数的ModelChoiceField:

groups = forms.ModelChoiceField(queryset=Group.objects.all())

似乎modelchoice是错误的,因为编辑表单中的当前组将不会被选中=被选中

这就是最终的解决方案:

groups = forms.ModelMultipleChoiceField( 
    queryset=None, 
    required=True, 
    widget=GroupsSelect,
)

 def __init__(self, *args, **kw):  
    super(ModelForm, self).__init__(*args, **kw)
    self.fields['groups'].queryset=Group.objects.filter(user=self.instance.id)

#view
op = UserAttributes.objects.get(id=operator_id)
form = SettingsOperatorsForm(instance=op)

我昨天遇到了这个问题,但还是不明白谢谢你的回复。
groups = forms.ModelMultipleChoiceField( 
    queryset=None, 
    required=True, 
    widget=GroupsSelect,
)

 def __init__(self, *args, **kw):  
    super(ModelForm, self).__init__(*args, **kw)
    self.fields['groups'].queryset=Group.objects.filter(user=self.instance.id)

#view
op = UserAttributes.objects.get(id=operator_id)
form = SettingsOperatorsForm(instance=op)