Отключение поля символов в DJANGO при создании нового пользователя
Я пытаюсь сделать что-то в Django, это касается jefe и encargados. Когда я вхожу в систему как администратор, она должна позволить мне создать энкаргадоса, но не менеджера, но если я вхожу как менеджер, она должна позволить мне создать нового энкаргадоса. Для jefe я использую таблицу users, а для admin я использую таблицу из панели администратора Django.
Вот модели:
roles = (
('encargado', 'ENCARGADO'),
('jefe','JEFE'),
)
class Usuarios(models.Model):
id = models.BigAutoField(primary_key=True)
nombre = models.CharField(max_length=30)
rol = models.CharField(max_length=30, choices=roles, default='encargado')
correo = models.CharField(max_length=30)
contraseña = models.CharField(max_length=30)
cedula = models.CharField(max_length=30)
class Meta:
db_table = 'usuarios'
Это представление создания
class UsuarioCrear(SuccessMessageMixin, CreateView):
model = Usuarios
form = Usuarios
fields = "__all__"
success_message = 'usuario creado correctamente !'
def get_success_url(self):
return reverse('leer')
Это будет html для создания, здесь я ставлю ограничение, что роли видны только администратору. но на самом деле нужно, чтобы если я администратор, это позволяло мне выбрать только jefe, а если я jefe, это позволяло мне выбрать только encargados
{% csrf_token %}
<!-- {{ form.as_p }} -->
<div class="form-group">
<label for="id" class="txt_negrita">Id</label>
{{ form.id|add_class:"form-control" }}
</div>
<div class="form-group">
<label for="nombre" class="txt_negrita">Nombre</label>
{{ form.nombre|add_class:"form-control" }}
</div>
{% if user.is_superuser %}
<div class="form-group">
<label for="rol" class="txt_negrita">Rol</label>
{{ form.rol|add_class:"form-control"}}
</div>
{%endif%}
<div class="form-group">
<label for="correo" class="txt_negrita">Correo</label>
{{ form.correo|add_class:"form-control" }}
</div>
<div class="form-group">
<label for="contraseña" class="txt_negrita">Contraseña</label>
{{ form.contraseña|add_class:"form-control" }}
</div>
<div class="form-group">
<label for="cedula" class="txt_negrita">Cedula</label>
{{ form.cedula|add_class:"form-control" }}
</div>
<button type="submit" class="btn btn-primary">Aceptar</button>
<a href="../" type="submit" class="btn btn-danger">Cancelar</a>
</form>
В вашем представлении вам нужно получить пользователя, чтобы передать его форме через kwargs. Добавьте следующий метод к вашему представлению
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
Теперь в вашей форме вы можете проверить пользователя при инициализации формы
class Usuarios(forms.Form):
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
#use whatever method you need to determine options,
# if self.user.is_staff: etc
if self.user.rol == 'jefe':
self.fields['rol'].choices = ('encargado', 'ENCARGADO'),
else:
self.fields['rol'].choices = ('jefe', 'JEFE'),