Когда я использую шаблон для заполнения формы, я не могу использовать флажки, потому что они появляются, как если бы они были отключены, и я не могу выбрать их, и пароль не сохраняется с хэшем, если не как простой текст
У меня есть код формы с моделью пользователя с 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>
Что происходит, когда форма генерируется, флажок не дает мне возможность активировать или деактивировать ее, но это происходит только при применении стилей материализациипотому что без них я не генерирую никаких ошибок в шаблоне, получаю пароль без его формата и обрабатываю его, как если бы это был какой-либо текст, и он генерируется без хеш-кода.