我需要制作一个表单,其中有1个选择和1个文本输入。选择必须从数据库中取出。 模式是这样的:字段选择()作为queryset?
class Province(models.Model):
name = models.CharField(max_length=30)
slug = models.SlugField(max_length=30)
def __unicode__(self):
return self.name
它的行这只能由管理员添加,但所有用户都可以看到它的形式。 我想从中做一个ModelForm。我做了这样的事情:
class ProvinceForm(ModelForm):
class Meta:
CHOICES = Province.objects.all()
model = Province
fields = ('name',)
widgets = {
'name': Select(choices=CHOICES),
}
但它不起作用。选择标记不显示在HTML中。我错了什么?
UPDATE:
此解决方案,因为我wanto它的工作:
class ProvinceForm(ModelForm):
def __init__(self, *args, **kwargs):
super(ProvinceForm, self).__init__(*args, **kwargs)
user_provinces = UserProvince.objects.select_related().filter(user__exact=self.instance.id).values_list('province')
self.fields['name'].queryset = Province.objects.exclude(id__in=user_provinces).only('id', 'name')
name = forms.ModelChoiceField(queryset=None, empty_label=None)
class Meta:
model = Province
fields = ('name',)
我已更新我的文章与工作解决方案。 – robos85 2011-02-24 13:05:29
+1:但它不应该'提交= False',否则你会打两次分贝 – 2011-12-18 14:43:02