2013-04-04 49 views
2

我有這個在我model.py如何在表單中使用模型中聲明的choiceField。 Django的

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)) 

回答

4

移動你的選擇是上述模型,在你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) 

我也爲你解決了一些其他問題:

  • 類名應以大寫字母
  • 你需要,因爲你是存儲字chevrolet隨時有人會在選擇中選擇Chevrolet下拉,以增加你的性格場max_length開始。

如果你是剛剛創建的形式保存記錄Marca模型,使用ModelForm,像這樣:

from yourapp.models import Marca 

class VehiculoForm(forms.ModelForm): 
    class Meta: 
     model = Marca 

現在,Django會自動呈現的選擇字段。

+0

forms.CharField上沒有選擇。 (錯誤代碼) 'super(CharField,self).__ init __(* args,** kwargs)TypeError:__init __()得到了一個意想不到的關鍵字參數'choices' – 2018-01-11 22:25:12

+0

Typo,它應該是** forms.ChoiceField ** – 2018-01-12 12:00:30

3

您需要定義選擇元組marcas外模型類class marca的。

然後你就可以在forms.py做以下使用

from models import marcas 

class addVehiculoForm(forms.Form): 
    marca = forms.CharField(max_length=2, widget=forms.Select(choices= marcas)) 
    ... 
相關問題