Django Redux表格中的复选框。我正在使用Django Redux

2024-10-03 02:40:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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

Tags: djangofrompyimportformnewmodelsforms
1条回答
网友
1楼 · 发布于 2024-10-03 02:40:07

确实要两个布尔字段吗?如果您有一个带有选项的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,以允许用户不勾选它们

相关问题 更多 >