首页 > 解决方案 > 使用具体化生成 django 表单时出错

问题描述

当我使用模板填写表格时,我无法使用复选框,因为它们看起来好像被禁用了,我无法选择它们,如果不是简单的文本,密码也不会与哈希一起保存

我有一个带有 AbstractUser 用户模型的表单代码和创建多个角色的信号:

            class User(AbstractUser):
            is_administrator = models.BooleanField(default=False)
            is_satellite = models.BooleanField(default=False)

            def get_administrator(self):
                administrator = None
                if hasattr(self, 'administrator'):
                    administrator = self.administrator
                return administrator

            def get_satellite(self):
                satellite = None
                if hasattr(self, 'satellite'):
                    satelite = self.satellite
                return satellite

            def __str__(self):
                return '%s %s' % (self.first_name, self.last_name)

            class Meta:
                db_table = 'auth_user'


        class Administrator(models.Model):
            user = models.OneToOneField(User, on_delete=models.CASCADE)
            business_name = models.CharField(max_length=30)


        class Satellite(models.Model):
            user = models.OneToOneField(User, on_delete=models.CASCADE)
            business_name = models.CharField(max_length=30)


        @receiver(post_save, sender=settings.AUTH_USER_MODEL)
        def assign_role(sender, instance, **kwargs):
            if instance.is_administrator:
                administrator = Administrator(user=instance)
                administrator.save()
            elif instance.is_satellite:
                satellite = Satellite(user=instance)
                satellite.save()

形式如下:

        from django import forms
        from .models import (
            User,
        )


        class UserForm(forms.ModelForm):
            class Meta:
                model = User
                fields = ['username', 'first_name', 'last_name', 'email',
                          'password', 'is_active', 'is_administrator', 
                          'is_satelite']
                labels = {
                    'username': 'Username',
                    'first_name': 'Name',
                    'last_name': 'Surname',
                    'email': 'Email',
                    'password': 'Password',
                    'is_active': 'State',
                    'is_administrator': 'Administrator',
                    'is_satellite': 'Satellite',
                },
                widgets = {
                    'username': forms.TextInput(
                        attrs={
                            'placeholder': 'Username',
                            'id': 'username'
                        }
                    ),
                    'first_name': forms.TextInput(
                        attrs={
                            'placeholder': 'Name',
                            'id': 'first_name'
                        }
                    ),
                    'last_name': forms.TextInput(
                        attrs={
                            'placeholder': 'Surname',
                            'id': 'last_name'
                        }
                    ),
                    'email': forms.EmailInput(
                        attrs={
                            'placeholder': 'Email',
                            'id': 'email'
                        }
                    ),
                    'password': forms.PasswordInput(
                        attrs={
                            'placeholder': 'Password',
                            'id': 'password'
                        }
                    ),
                     'is_active': forms.CheckboxInput(
                    attrs={
                        'placeholder': 'State',
                        'id': 'is_active'
                    }
                ),
                'is_administrator': forms.CheckboxInput(
                    attrs={
                        'placeholder': 'state',
                        'id': 'is_administrator'
                    }
                ),
                'is_satellite': forms.CheckboxInput(
                    attrs={
                        'placeholder': 'State',
                        'id': 'is_satellite'
                    }
                ),

我正在使用模板来使用整个表单:

        <div class="card">
            <div class="card-content">
                <div class="card-title">New User Registration</div>
                <div class="row">
                    <form class="col s12" method="POST">
                        {% csrf_token %}
                        {{ form.as_p }}
                        <a href="{{ request.META.HTTP_REFERER }}" class="waves-effect waves-green btn-flat">Cancel</a>
                        <button type="submit" class="waves-effect waves-green btn-flat right"><i
                                class="material-icons left">how_to_reg</i>Register</button>
                    </form>
                </div>
            </div>
        </div>

发生的情况是,当生成表单时,该复选框没有给我激活或停用它的选项,但只有当我应用具体化样式时才会发生这种情况,因为没有它们我不会在模板中生成任何错误并且我得到密码没有它的格式并将其视为任何文本,并且它是在没有哈希的情况下生成的。

标签: django

解决方案


您可以尝试从 django 表单添加密码,因此添加密码表单字段,如下所示

password = forms.CharField(widget=forms.PasswordInput)

对于复选框,这个问题在没有在 django 中实现,请尝试将其添加到您的 css

.input-field label {
  pointer-events: auto;
}

它应该可以解决您的问题,希望它有效^_^


推荐阅读