2013-01-23 209 views
1

我想基於模型選擇提供表單字段。所以,如果在我的模型:基於模型選擇的Django表單字段

COLORS = (
    ('BLA', 'Black'), 
    ('WHI', 'White'), 
    ('RED', 'Red'), 
    ('BLU', 'Blue'), 
) 

YEAR_CHOICES = [] 
for r in range(1980, (datetime.datetime.now().year+1)): 
    YEAR_CHOICES.append((r,r)) 

class Thing(models.Model): 
    stuff = models.ForeignKey(Stuff) 
    color = models.CharField(max_length=3, choices=COLORS) 
    year = models.IntegerField(('year'), max_length=4, choices=YEAR_CHOICES, default=datetime.datetime.now().year) 

我要創建兩個表單域,一個其<select>選項YEAR_CHOICES和一個其選項COLORS。你能用ModelChoiceField做這個嗎?在我的forms.py中重新定義選項似乎不太乾。否則,您將如何解決此問題?

像這樣的東西是什麼,我曾設想,但它不工作:

class BrowseForm(forms.Form): 
    stuff = forms.ModelChoiceField(queryset=Stuff.objects.all()) 
    color = forms.ModelChoiceField(queryset=Thing.color.choices()) 
    year = forms.ModelChoiceField(queryset=Thing.year.choices()) 

回答

1

從文檔(here

可以使用select小部件,並指定選擇。在你的情況

color = forms.CharField(max_length=20, widget=forms.Select(choices=COLORS))

不過,既然你已經和choices定義color你其實並不需要做任何事情(除了其它BrowseForm元設置爲Thing)得到這個工作。它將默認爲你想要的行爲。

1

你可以使用一個模型形式

from django.forms import ModelForm 

class BrowseForm(ModelForm): 
    class Meta: 
     model = Thing 

然後,它將在你的選擇自動拉。

相關問題