Ошибка при создании формы Django с материализацией - PullRequest
0 голосов
/ 29 октября 2019

Когда я использую шаблон для заполнения формы, я не могу использовать флажки, потому что они появляются, как если бы они были отключены, и я не могу выбрать их, и пароль не сохраняется с хэшем, если не как простой текст

У меня есть код формы с моделью пользователя с 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>

Что происходит, когда форма генерируется, флажок не дает мне возможность активировать или деактивировать ее, но это происходит только при применении стилей материализациипотому что без них я не генерирую никаких ошибок в шаблоне, получаю пароль без его формата и обрабатываю его, как если бы это был какой-либо текст, и он генерируется без хеш-кода.

1 Ответ

0 голосов
/ 30 октября 2019

вы можете попытаться добавить пароль из формы django, поэтому добавьте поле формы пароля, как это

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

, и для флажка эта проблема материализуется, а не в django, попробуйте добавить это в ваш css

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

это должно исправить вашу проблему, надеюсь, это сработает ^ _ ^

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...