我需要制作一个表单,其中包括1个下拉选择框和1个文本输入框。下拉选择框必须从数据库中获取。 模型如下:
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中未显示。我做错了什么?
更新:
这个解决方案按照我的要求起作用:
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',)
CHOICES = Province.objects.values_list('id', 'name')
可以工作。 - eugene