【发布时间】:2021-05-23 21:44:46
【问题描述】:
我正在尝试在我的表单中添加一个选项下拉框。我尝试了什么:
from django import forms
from .models import Car
class CarForm(forms.ModelForm):
owner_name = forms.CharField(max_length=100, label='Owner Name', required=True)
car_type = forms.ChoiceField(choices=Car.CarTypes.choices, label='Car Type', required=True)
class Meta:
model = Car
fields = ('owner_name', 'car_type')
它将car_type 字段添加到表单中,但由于某种原因它不是下拉列表(它是一个您可以填写的常规空框)。 CarTypes 看起来像:
class CarTypes(models.TextChoices):
X = 'some_x'
Y = 'somy_y'
# ...
可能是什么原因?
在我的Car 课程中,我有:car_type = models.CharField(max_length=24, choices=CarTypes.choices, default=CarTypes.X)。可以吗?我认为CharField 使它成为空盒子。但将其更改为ChoiceField 以:module 'django.db.models' has no attribute 'ChoiceField' 结尾。如何解决?
我试过这个approach,但它使用元组而不是类。从那里的示例中,我看到他们使用像(('a','A'),('b','B')) 这样的二值元组的元组,而我正在使用类。会不会是这个原因?
在我的 html 中,我有:
<form method="post" class="form-group">
{% csrf_token %}
{% for field in form %}
<div class="form-group col-md-12 mb-3">
<label for="{{ field.label }}">{{ field.label }}</label>
<input type="text" class="form-control" id="{{ field.label }}" name="{{ field.name }}">
</div>
{% endfor %}
<hr class="mb-4">
<button type="submit" class="btn btn-secondary btn-lg btn-block">Submit New Car</button>
</form>
汽车看起来像:
class Car(models.Model):
class CarTypes(models.TextChoices):
X = 'some_x'
Y = 'somy_y'
# ...
owner_name = models.CharField(max_length=100,unique=True)
car_type = models.CharField(max_length=24, choices=CarTypes.choices, default=CarTypes.X)
def __str__(self):
return self.owner_name
【问题讨论】:
-
分享您的模型
Car。 Django 版本?