【问题标题】:Check box in django redux form. I am using django-reduxdjango redux 表单中的复选框。我正在使用 django-redux
【发布时间】:2018-03-20 09:53:39
【问题描述】:

我在 django redux 注册表单中添加了两个复选框。现在,我可以检查这两个选项,但我希望用户一次选择任何一个。如何做到这一点? 下面是我的代码

models.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class UserSelection(models.Model):
    employer = models.BooleanField()
    candidate = models.BooleanField()
    user = models.OneToOneField(User)

forms.py

from django import forms
from registration.forms import RegistrationFormUniqueEmail

class MyRegForm(RegistrationFormUniqueEmail):
    employer = forms.BooleanField()
    candidate = forms.BooleanField()

regbackend.py

from registration.backends.default.views import RegistrationView
from .forms import MyRegForm
from .models import UserSelection

class MyRegistrationView(RegistrationView):
    form_class = MyRegForm

    def register(self, form_class):
        new_user = super(MyRegistrationView, self).register(form_class)
        p = form_class.cleaned_data['employer']
        q = form_class.cleaned_data['candidate']
        new_profile = UserSelection.objects.create(user=new_user, employer=p, candidate=q)
        new_profile.save()
        return new_user

【问题讨论】:

    标签: python django django-registration


    【解决方案1】:

    您确定要两个布尔字段吗?如果您有一个带有选项的 char 字段,则该表单将只允许您选择一个选项。

    USER_TYPE_CHOICES = [
        ('employer', 'Employer'),
        ('candidate', 'Candidate'),
    ]
    
    class UserSelection(models.Model):
        user = models.OneToOneField(User)
        user_type = models.CharField(max_length=10, choices=USER_TYPE_CHOICES)
    

    如果你真的想要两个布尔字段,你可以为你的模型写一个干净的方法。

    from django.core.exceptions import ValidationError
    
    class UserSelection(models.Model):
        employer = models.BooleanField(blank=True)
        candidate = models.BooleanField(blank=True)
        user = models.OneToOneField(User)
    
        def clean(self):
            if self.employer and self.candidate:
                raise ValidationError("You cannot select employer and candidate")
            if not (self.employer or self.candidate):
                raise ValidationError("You must select employer or candidate")
    

    请注意,您需要在布尔字段上使用 blank=True 以允许用户不勾选它们。

    【讨论】:

    • 如果我们只选择一个选项,那么它也要求单击其他选项。如何停用它?
    • 您需要在布尔字段上设置blank=True 以使其可选。
    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 2018-09-26
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多