Necesito hacer un formulario, que tiene 1 selección y 1 entrada de texto. Seleccione debe tomarse de la base de datos. modelo se parece a esto:opciones de campo() como queryset?
class Province(models.Model):
name = models.CharField(max_length=30)
slug = models.SlugField(max_length=30)
def __unicode__(self):
return self.name
filas de TI para este sólo se añaden por admin, pero todos los usuarios pueden ver en las formas. Quiero hacer un ModelForm a partir de eso. Hice algo como esto:
class ProvinceForm(ModelForm):
class Meta:
CHOICES = Province.objects.all()
model = Province
fields = ('name',)
widgets = {
'name': Select(choices=CHOICES),
}
pero no funciona. La etiqueta de selección no se muestra en html. ¿Qué hice mal?
ACTUALIZACIÓN:
Esta solución funciona como Wanto a trabajar:
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',)
He actualizado mi post con la solución de trabajo. – robos85
+1: pero no debería 'commit = False', de lo contrario golpeará el db dos veces –