J'ai une méthode d'enregistrement dans views.py

def register_page(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create_user(username=form.cleaned_data['username'],
                                            password=form.cleaned_data['password1'],
                                            email=form.cleaned_data['email'])
            if request.POST.get("admin", ""):
                content_type = ContentType.objects.get_for_model(User)
                permission = Permission.objects.get(codename='admin_can_manage_users')
                user.user_permissions.add(permission)
            new_user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password1'])
            login(request, new_user)
            return redirect('payment_list')
    form = RegistrationForm()
    variables = RequestContext(request, {'form': form})
    return render_to_response('registration/register.html',variables)

J'ai également un formulaire d'inscription avec des champs standard et des cases à cocher supplémentaires ajoutées manuellement. Je veux vérifier si une case est cochée et si oui, ajouter des autorisations aux utilisateurs.

<form method="post" action=".">
{{ form.as_p }}
    <input type="radio" class='radio-button' name="regular" id="regular"/><label for="regular">User</label>
    <input type="radio" class='radio-button' name="manager" id="manager"/><label for="manager">Manager</label>
    <input type="radio" class='radio-button' name="admin" id="admin"/><label for="admin">admin</label>
<input type="submit" value="register" />

</form>

Désormais, les autorisations ne sont pas attribuées automatiquement. Auparavant, j'attribuais cette autorisation au premier utilisateur et cela fonctionnait, mais lorsque j'essayais de l'attribuer à un autre utilisateur, je n'obtenais rien.

0
Alex Ermolaev 17 janv. 2017 à 16:14

2 réponses

Meilleure réponse

L'erreur était due à l'espace de noms: ma permission était dans l'espace de noms auth. Juste changé pour un autre (un autre modèle) et cela fonctionne parfaitement.

0
Alex Ermolaev 19 janv. 2017 à 15:30

Avez-vous enregistré l'utilisateur?

user.user_permissions.add(permission)
user.save()

Vous pouvez également activer les journaux et voir ce que les requêtes django font à la base de données comme ceci

1
Community 23 mai 2017 à 11:45