首页 > 解决方案 > 如何在 django 的布尔字段中添加单选按钮

问题描述

我有一个自定义用户模型。当我选择复选框时进入注册表单时,请选择它们的布尔字段。我想限制用户在注册表单中只能选择一个布尔字段的布尔字段。我想在布尔字段中添加一个单选按钮。有没有办法在布尔字段中添加单选按钮?

在此处输入图像描述

表格.py

class SignupForm(forms.ModelForm):
    class Meta:
        model = User
        fields =  [
                "name",
                "username",
                "email",
                "password",
                
                'is_superuser',
                'is_Customer',
                'is_Service_Provider'


        ]       
        widgets = {
            'name': forms.TextInput(attrs={'class': 'form-control'}),
            'username': forms.TextInput(attrs={'class': 'form-control'}),
            'email': forms.TextInput(attrs={'class': 'form-control'}),
            'password': forms.TextInput(attrs={'class': 'form-control'}),
            'is_superuser'  : forms.CheckboxInput('input_type' == 'radio'),
            'is_Service_Provider'   :forms.CheckboxInput('input_type' == 'radio'),
            'is_Customer' : forms.RadioSelect(),
            

        }
        

模型.py

class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=254, unique=True)
    name = models.CharField(max_length=254, null=True)
    email = models.EmailField(max_length=254, null=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_Customer = models.BooleanField(default=True)
    is_Service_Provider = models.BooleanField(default=False)
    phone_regex = RegexValidator( regex = r'^\+?1?\d{9,10}$', message = "Phone number must be in the form of =919999999999")
    phone  = models.CharField('Phone', validators = [phone_regex], max_length=254, unique=True, null=True, blank=True)

    last_login = models.DateTimeField(null=True, blank=True)
    date_joined = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'username'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

    def get_absolute_url(self):
        return "/users/%i/" % self.pk

    def get_username(self):
        return self.username

标签: pythonpython-3.xdjangodjango-modelsdjango-forms

解决方案


您需要有一个表单域并有 3 个不同的选项作为选择:

isSuperUser = 'Is Superuser'
isCustomer = 'Is Customer' 
isServiceProvider = 'Is Service Provider'

User_choices = (
    (isSuperUser, 'Is Superuser'),
    (isCustomer, 'Is Customer'),
    (isServiceProvider, 'Is Service Provider')
)

然后在您的表格中:

Usertype = forms.MultipleChoiceFieldChoiceField(widget=forms.RadioSelect, choices=User_choices)

此处文档中的更多信息:https ://docs.djangoproject.com/en/3.0/ref/forms/widgets/#widgets-inheriting-from-the-select-widget


推荐阅读