通过Django / Python中的自定义表单更新用户数据

时间:2015-11-30 20:52:47

标签: javascript python django

我目前正在使用Python 3.4.3和Django 1.8.4,我需要更新用户的一些值,这是我的代码。当我尝试保存用户时,不会保存新的权限状态。

def permissions(request):
if request.method == 'POST':
    try:
        username = request.POST.get('usuario')
        permiso = request.POST.get('permiso')

        print("usuario seleccionado", username)
        print("permisos seleccionados", permiso)

        if permiso == 'Administrador':
            permiso = 'ad'
            print("seleccion permisos de Administrador")
        if permiso == 'Planificador':
            permiso = 'pl'
            print("seleccion permisos de Planificador")
        if permiso == 'Básico':
            permiso = 'bs'
            print("seleccion permisos de Básico")

        usp = UserProfile(user = username, role = permiso) 
        print("Usuario modificado",usp)
        usp.save()

        return HttpResponse(
        json.dumps({'redirect': "/SQM/administrar_usuarios/"}),
        content_type="application/json"
                    )         
    except:
        return HttpResponse(
                    json.dumps({'redirect': "error!"}),
                    content_type="application/json"
                                )

我通过javascript发送数据。 这是我的模特。

class UserProfile(models.Model):
user = models.OneToOneField(User)
role = models.CharField(max_length=2, choices=TIPOS_USUARIO)
class Meta:
    verbose_name='Perfil de usuario'
    verbose_name_plural = 'Perfiles de usuario'
def  __str__(self):
    return self.user.username

这是我在html文件中的观点。

<div class="col-md-4">
                <label>Seleccionar Usuario</label>
                <select class="form-control usuarios" id="uid" >
                    {% for usuarios in users%}
                    <option data-userdata-id="{{ usuarios.id }}">{{usuarios.user}}</option>
                    {%endfor%}
                </select>
        </div>
        <div class="col-md-4">
            <div class="form-group">
                <label>Seleccionar Permisos</label>
                <select class="form-control permisos" id="pid">
                    {% for roles in permisos%}
                    <option data-permisos-id="{{ roles }}">{{roles}}</option>
                    {%endfor%}
                </select>                   
            </div>
        </div>

我正在尝试从1个用户更新角色状态。

我的自定义权限装饰。

def permission_required(permission_array):
def decorator(view_function):
    def wrapper(request, *args, **kwargs):
        if(request.user.userprofile.role in permission_array):
            return view_function(request, *args, **kwargs)
        else:
            return HttpResponse("<h2>No cumple permisos</h2>")
    return wrapper
return decorator

感谢您的智慧。

1 个答案:

答案 0 :(得分:0)

当我试图重命名用户权限时,我也试图重新保存同一个用户,这是不允许的,因为我的模型是一对一的字段。

我替换了这一行。

usp = UserProfile(user = username, role = permiso)

这个。

        user = User.objects.get(username=username)            
        usp = UserProfile.objects.get(user = user)            
        usp.role = permiso
        usp.save()

非常感谢您的评论。