Django permissions in checkbox form

Viewed 1893

I have a template in which I edit all the basic fields of a model User.

Now I want to have a form in which there will be displayed all available permissions in a checkbox-like style. The ones already assigned to the User should already be checked.

I have a form.py, with a form for editing User, but have not completed the permissions form.

class UserSettingsForm(forms.ModelForm):
class Meta:
    model = User
    fields = (
        'username',
        'first_name',
        'last_name',
        'email',
        'urnik',
        'ure_na_teden',
        'rfid',
        'oddelek',
        'status_zaposleni',
    )

def __init__(self, *args, **kwargs):
    self.request = kwargs.pop("request")
    super(UserSettingsForm, self).__init__(*args, **kwargs)
    instance = getattr(self, 'instance', None)
    self.fields['username'].disabled = True

def save(self):
    user = super(UserSettingsForm, self).save()
    return user

class UserPermissonsForm(forms.ModelForm):
class Meta:
    model = Permission
    fields = (
        'name',
        'content_type',
        'codename',
    )

And a views.py:

@login_required
def uporabnik_uredi(request, username=None):
user = get_object_or_404(User, username=username)
uporabnik_form = UserSettingsForm(request.POST or None,request=request, instance=user)
permissions = [(p.id, p.name) for p in Permission.objects.filter(user=user)]
data = {
    'uporabnik' : user,
    'form' : uporabnik_form,
    'from': request.GET.get('from', None),
    'permissions' : permissions,
}

if request.POST:
    if uporabnik_form.is_valid():
        user = uporabnik_form.save()
        next = request.GET.get('next', None)
        return redirect(next)
return render(request, "sifranti/uporabniki/uredi.html", data)

And also a template, just to see which current permissions are assigned to the user:

<div class="">
    {% for id, name in permissions %}
        {{ id }} - {{ name }} <br>
    {% endfor %}
</div>
1 Answers
Related