Python Django用户:获取组列表,或者如何将multipleEchoiceField转换为ChoiceField
我搜索过类似的主题,但没有找到我需要的 我用UserAttributes模型扩展了用户模型,添加了一些附加字段等等。。现在我正试着做一个模型。。所以我这里有个小问题 我想将组列为ChoiceField,而不是MultipleChiiceField。。这是规范的要求,所以必须如此 这是代码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
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)