Django 模型字段单选按钮

Posted

技术标签:

【中文标题】Django 模型字段单选按钮【英文标题】:Django Model Fields Radio Button 【发布时间】:2017-01-26 18:08:18 【问题描述】:

如何使用 Django 模型字段创建单选按钮

#models.py

GENDER_CHOICES = (
   ('M', Male),
   ('F', 'Female')
)

class Profile(models.Model):
     gender = models.CharField(choices=GENDER_CHOICES, max_length=128)

上述字段呈现为选择字段,但我想将其设为 一个单选按钮。

如果问题不正确,请有人更正问题

【问题讨论】:

【参考方案1】:

我想你的意思是enumeration types

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,
        

【讨论】:

【参考方案2】:

这适用于 Django 2.1 及更高版本

models.py 保持不变

在 admin.py 中

   from django.contrib import admin 

   class ProfileAdmin(admin.ModelAdmin):

   fields = (......, 'gender',...)

   radio_fields = 'gender': admin.VERTICAL

【讨论】:

【参考方案3】:

选择字段的默认小部件是选择/选择列表。 您可以在表单中更改小部件

 gender = forms.ChoiceField(choices=GENDER_CHOICES, widget=forms.Radioselect())

【讨论】:

我怎样才能在模型字段而不是表单中做到这一点 你可以做到,你必须覆盖默认模型实现,请点击链接docs.djangoproject.com/en/dev/howto/custom-model-fields/… @thameem 如果你觉得我的回答没问题,把它标记为正确,这会增加我的分数。 'django.db.models' 没有属性 'ChoiceField' 你能解释一下吗? 不适用于 django 模型

以上是关于Django 模型字段单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何根据在模型级别定义的枚举字段在 Django Modelform 中呈现单选按钮选择?

将 django 表单中的布尔模型字段显示为单选按钮而不是默认复选框

带有来自模型的额外信息的 Django 渲染单选按钮选项

Django BooleanField 作为单选按钮?

如何在Django管理员中制作单选按钮

如何在 Django 中呈现单个单选按钮选项?