【发布时间】:2021-02-11 17:16:04
【问题描述】:
我在 Django 中使用 ModelForms 来创建我的表单。这很好用。但是,数据库中有一个字段是字符字段,但对于特定表单,我想将用户可以输入的选项限制为特定项目列表 - 理想情况下显示在 <select> 中。这样做的正确方法是什么?这是我的代码:
form = ModelForm(request.POST or None, instance=Street.objects.get(pk=1))
在我的模型中:
class Street(models.Model):
name = models.CharField(max_length=255)
我尝试了以下方法:
from django import forms
CHOICES = [('1', 'First'), ('2', 'Second')]
choice_field = forms.ChoiceField(widget=forms.Select, choices=CHOICES)
form.fields["street"].widget = choice_field
这给出了这个错误:
'ChoiceField' object has no attribute 'attrs'
【问题讨论】:
-
您将
Field实例分配为Widget。尝试定义:1)自定义表单,如第一个答案中所述,或2)尝试用form.fields["street"] = choice_field替换字段。首选方式是 1,您可以在其中将street字段重新定义为类属性。编辑:如果您想缩小Street模型的数据库记录,请尝试重新定义字段的查询集,即form.fields["street"].queryset = Street.objects.filter(pk__in=(1, 2))
标签: django django-forms modelform