Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于模型选择的Django表单字段_Django_Forms_Models - Fatal编程技术网

基于模型选择的Django表单字段

基于模型选择的Django表单字段,django,forms,models,Django,Forms,Models,我想提供基于模型选择的表单字段。因此,如果在我的模型中: 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(mode

我想提供基于模型选择的表单字段。因此,如果在我的模型中:

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)
我想创建两个表单字段,一个是
选项为
YEAR\u选项
,另一个是
颜色
。是否可以使用
modelcoocefield
执行此操作?在my
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())
从文件中()

您可以使用
选择
小部件并指定选项。就你而言

color=forms.CharField(最大长度=20,小部件=forms.Select(选项=COLORS))


但是,由于您已经使用
选项定义了
颜色
,实际上您不需要做任何事情(除了将
浏览表单
的meta设置为
东西
)来实现此功能。它将默认为您想要的行为。

您可以使用模型表单

from django.forms import ModelForm

class BrowseForm(ModelForm):
    class Meta:
        model = Thing
然后它会自动拉入您的选择