在 Django 中将选择加载到表单中的选择字段
loading choices to choicefield in form in Django
我无法在选择字段中加载选择,下面我将向您展示我的代码:
我使用这样的表格:
class ClientesForm(forms.ModelForm):
nombre = forms.CharField( help_text="Nombre")
apellido = forms.CharField(help_text="Apellido")
ci = forms.IntegerField(help_text="CI")
estado = forms.ChoiceField(help_text="Estado")
class Meta:
model=Clientes
fields = ('nombre', 'apellido', 'ci', 'estado')
这样的模型:
class Clientes(models.Model):
nombre = models.CharField(max_length=20)
apellido = models.CharField(max_length=20)
ci = models.IntegerField(max_length=10, unique=True, default=0)
ESTADO = Choices('Activo', 'Inactivo', 'Deudor')
estado = models.CharField(choices=ESTADO, default=ESTADO.Activo, max_length=20)
def __unicode__(self):
return self.nombre
以及像这样创建新客户的视图:
def nuevo_cliente(request):
if request.method == 'POST':
form = ClientesForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/home')
else:
print form.errors
else:
form = ClientesForm()
return render(request, 'nuevo_cliente.html', {'form':form})
问题是,当我从管理员视图创建新客户端时,我可以选择客户端是 'Activo'、'Inactivo'、'Deudor'。但是当我尝试从视图创建一个新客户端时,choiceField 是空的,我该如何将选择加载到 choicefield?
谢谢!
如果您以 class 形式定义选择字段,则必须提供 choices
参数:
class ClientesForm(forms.ModelForm):
...
estado = forms.ChoiceField(help_text="Estado", choices=Clientes.ESTADO)
但为什么要在表单中重新定义模型字段?不需要:
class ClientesForm(forms.ModelForm):
class Meta:
model=Clientes
fields = ('nombre', 'apellido', 'ci', 'estado')
我无法在选择字段中加载选择,下面我将向您展示我的代码: 我使用这样的表格:
class ClientesForm(forms.ModelForm):
nombre = forms.CharField( help_text="Nombre")
apellido = forms.CharField(help_text="Apellido")
ci = forms.IntegerField(help_text="CI")
estado = forms.ChoiceField(help_text="Estado")
class Meta:
model=Clientes
fields = ('nombre', 'apellido', 'ci', 'estado')
这样的模型:
class Clientes(models.Model):
nombre = models.CharField(max_length=20)
apellido = models.CharField(max_length=20)
ci = models.IntegerField(max_length=10, unique=True, default=0)
ESTADO = Choices('Activo', 'Inactivo', 'Deudor')
estado = models.CharField(choices=ESTADO, default=ESTADO.Activo, max_length=20)
def __unicode__(self):
return self.nombre
以及像这样创建新客户的视图:
def nuevo_cliente(request):
if request.method == 'POST':
form = ClientesForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/home')
else:
print form.errors
else:
form = ClientesForm()
return render(request, 'nuevo_cliente.html', {'form':form})
问题是,当我从管理员视图创建新客户端时,我可以选择客户端是 'Activo'、'Inactivo'、'Deudor'。但是当我尝试从视图创建一个新客户端时,choiceField 是空的,我该如何将选择加载到 choicefield?
谢谢!
如果您以 class 形式定义选择字段,则必须提供 choices
参数:
class ClientesForm(forms.ModelForm):
...
estado = forms.ChoiceField(help_text="Estado", choices=Clientes.ESTADO)
但为什么要在表单中重新定义模型字段?不需要:
class ClientesForm(forms.ModelForm):
class Meta:
model=Clientes
fields = ('nombre', 'apellido', 'ci', 'estado')