创建新用户时禁用DJANGO中的字符域

33qvvth1  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(165)

我在Django中做了一个小动作,是关于jefe和encargados的。当我以管理员身份登录时,它必须允许我创建一个encargados,但不允许我创建一个管理者,但如果我以管理者身份登录,它必须允许我创建一个新的encargados。对于jefe,我使用一个名为users的表,对于管理员,我使用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>
czq61nw1

czq61nw11#

在视图中,需要获取用户,以便通过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'),

相关问题