问题
I have this in my model.py
class marca(models.Model):
marcas = (
('chevrolet', 'Chevrolet'),
('mazda', 'Mazda'),
('nissan', 'Nissan'),
('toyota', 'Toyota'),
('mitsubishi', 'Mitsubishi'),
)
marca = models.CharField(max_length=2, choices= marcas)
def __unicode__(self):
return self.marca
And I need to use it in my form.py
I tried this but it doesn't work.
class addVehiculoForm(forms.Form):
placa = forms.CharField(widget = forms.TextInput())
tipo = forms.CharField(max_length=2, widget=forms.Select(choices= tipos_vehiculo))
marca = forms.CharField(max_length=2, widget=forms.Select(choices= marcas))
回答1:
Move your choices to be above the model, in the root of your models.py
:
marcas = (
('chevrolet', 'Chevrolet'),
('mazda', 'Mazda'),
('nissan', 'Nissan'),
('toyota', 'Toyota'),
('mitsubishi', 'Mitsubishi'),)
class Marca(models.Model):
marca = models.CharField(max_length=25,choices=marcas)
Then in your file where you declare the form:
from yourapp.models import marcas
class VehiculoForm(forms.Form):
marca = forms.ChoiceField(choices=marcas)
I also fixed some other problems for you:
- Class names should start with a capital letter
- You need to increase the
max_length
of your character field because you are storing the wordchevrolet
anytime someone will selectChevrolet
in the choice drop down.
If you are just creating a form to save records for Marca
model, use a ModelForm, like this:
from yourapp.models import Marca
class VehiculoForm(forms.ModelForm):
class Meta:
model = Marca
Now, django will render the choice field automatically.
回答2:
You need to define the choices tuple marcas
outside of model class class marca
.
Then you can do following in forms.py to use
from models import marcas
class addVehiculoForm(forms.Form):
marca = forms.CharField(max_length=2, widget=forms.Select(choices= marcas))
...
回答3:
I prefer holding choices still inside the model, so they do not get mixed with other models. Then the solution would be:
models.py:
Same as in question.
forms.py:
from yourapp.models import marca
class VehiculoForm(forms.Form):
marca = forms.ChoiceField(choices=marca.marcas)
class Meta:
model = marca
fields= ('marca')
You could also just define meta, if you want default model fields.
来源:https://stackoverflow.com/questions/15802254/how-to-use-a-choicefield-declared-in-the-model-in-a-form-django