Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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_Django Models_Django Forms - Fatal编程技术网

Django模型中的下拉列表

Django模型中的下拉列表,django,django-models,django-forms,Django,Django Models,Django Forms,我想在Django models.py中创建一个字段,该字段将呈现为下拉列表,用户可以从中选择选项 如果我有5个选择: 绿色 蓝色 红色 橙色 黑色 如何在models.py和Forms.py中编写代码,以便模板将其呈现为下拉元素?在模型中指定CharField或IntegerField with choices选项并使用ModelForm。从模型到模板: models.py forms.py views.py template.html Django 3.0版及更高版本中的更好选项: 您可以使

我想在Django models.py中创建一个字段,该字段将呈现为下拉列表,用户可以从中选择选项

如果我有5个选择:

绿色 蓝色 红色 橙色 黑色
如何在models.py和Forms.py中编写代码,以便模板将其呈现为下拉元素?

在模型中指定CharField或IntegerField with choices选项并使用ModelForm。

从模型到模板:

models.py

forms.py

views.py

template.html

Django 3.0版及更高版本中的更好选项:

您可以使用从新models.TextChoices类继承的内部类。这还提供了一种方便的方式来提供人类可读和可翻译的标签,以及一个很好的程序员界面


您还应该包括一个url.py,其中有Django 2.0+,urlpatterns=[path,views.home,name='home',path'abc',views.CreateMyModelView.as_view,name='abc']这样的东西,我们可以不使用create按钮吗?如果我想选择两个或三个cose,比如[green,blue]
COLOR_CHOICES = (
    ('green','GREEN'),
    ('blue', 'BLUE'),
    ('red','RED'),
    ('orange','ORANGE'),
    ('black','BLACK'),
)

class MyModel(models.Model):
  color = models.CharField(max_length=6, choices=COLOR_CHOICES, default='green')
class MyModelForm(ModelForm):
    class Meta:
        model = MyModel
        fields = ['color']
class CreateMyModelView(CreateView):
    model = MyModel
    form_class = MyModelForm
    template_name = 'myapp/template.html'
    success_url = 'myapp/success.html'
<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Create" />
</form>
{{ form.color }}
from django.utils.translation import gettext_lazy as _

class Student(models.Model):

    class YearInSchool(models.TextChoices):
        FRESHMAN = 'FR', _('Freshman')
        SOPHOMORE = 'SO', _('Sophomore')
        JUNIOR = 'JR', _('Junior')
        SENIOR = 'SR', _('Senior')
        GRADUATE = 'GR', _('Graduate')

    year_in_school = models.CharField(
        max_length=2,
        choices=YearInSchool.choices,
        default=YearInSchool.FRESHMAN,
    )

    def is_upperclass(self):
        return self.year_in_school in {
            self.YearInSchool.JUNIOR,
            self.YearInSchool.SENIOR,
        }

###########
# human readable text can then be called by...
Student.YearInSchool.Junior.label

# or from an instance by <instance>.get_<innerclass name>_display() like...
student_inst.get_yearinschool_display()