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))
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_lengthof your character field because you are storing the wordchevroletanytime someone will selectChevroletin 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.
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))
...
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