How to use a choiceField declared in the model, in a form. django
15,983
Solution 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.
Solution 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))
...
Related videos on Youtube
Author by
Hugo Montoya
Updated on September 15, 2022Comments
-
Hugo Montoya over 1 year
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))
-
Julio Marins about 6 yearsthere is no choices on forms.CharField.
super(CharField, self).__init__(*args, **kwargs) TypeError: __init__() got an unexpected keyword argument 'choices'
-
Burhan Khalid about 6 yearsTypo, it should be forms.ChoiceField