Как использовать поле выбора, объявленное в модели, в форме. Джанго
У меня это в моем 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
И мне нужно использовать его в моем form.py
Я пытался это сделать, но ничего не вышло.
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))
3 ответа:
Переместите свой выбор выше модели, в корень Вашего
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)
Затем в вашем файле, где вы объявляете форму:
from yourapp.models import marcas class VehiculoForm(forms.Form): marca = forms.ChoiceField(choices=marcas)
Я также исправил некоторые другие проблемы для вас:
- имена классов должны начинаться с заглавной буквы
- вам нужно увеличить
max_length
вашего поля символов, потому что вы сохраняете словоchevrolet
в любое время, когда кто-то выберетChevrolet
в выпадающем списке выбора.Если вы просто создаете форму для сохранения записей для модели
Marca
используйте aModelForm
, вот так:from yourapp.models import Marca class VehiculoForm(forms.ModelForm): class Meta: model = Marca
Теперь django автоматически отобразит поле выбора.
Вам нужно определить кортеж выбора
marcas
вне класса моделиclass marca
.Тогда вы можете сделать следующее в forms.py использовать
from models import marcas class addVehiculoForm(forms.Form): marca = forms.CharField(max_length=2, widget=forms.Select(choices= marcas)) ...
Я предпочитаю держать выбор все еще внутри модели, чтобы он не смешивался с другими моделями. Тогда решение будет следующим:
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')
Вы также можете просто определить meta, если вам нужны поля модели по умолчанию.