Переопределение метода модели save () для разрешений - PullRequest
0 голосов
/ 04 июля 2011

Я пытаюсь переопределить метод save (), чтобы только создатель и администратор могли обновить значения поля модели как:

if not self.pk:
        super(Shastra, self).save(*args, **kwargs)
else:
        if (self.person == args[0].user) or (self.person.is_superuser):
            super(Shastra, self).save(*args, **kwargs)

При обновлении передаю запрос в метод сохранения как

 def edit(request, shastra_id):
    shastra_id = int(shastra_id)
    shastra = Shastra.objects.get(pk = shastra_id )
    if request.method == 'POST':
        form_shastra_edit = ShastraEditForm(request.POST, instance = shastra)
        if form_shastra_edit.is_valid():
            form_shastra_edit.save(request)
            return HttpResponseRedirect('/edited/successfully')
    else:
    form_shastra_edit = ShastraEditForm(instance = shastra)

Но я получаю ошибку "индекс кортежа вне диапазона". Что в этом не так?

1 Ответ

1 голос
/ 04 июля 2011

Нельзя использовать запрос в методе Model.save (). Вы должны выполнить проверку на основе запроса в вашем методе представлений (например, в вашем методе редактирования). Слой модели не знает объектов «запрос» ..

Сделайте ваш метод редактирования что-то вроде:

def edit(request, shastra_id):
    shastra_id = int(shastra_id)
    shastra = Shastra.objects.get(pk = shastra_id )
    if request.method == 'POST':
        form_shastra_edit = ShastraEditForm(request.POST, instance = shastra)
        if form_shastra_edit.is_valid() and shastra.user == request.user:
                form_shastra_edit.save(request)
                return HttpResponseRedirect('/edited/successfully')
    else:
        form_shastra_edit = ShastraEditForm(instance = shastra)
...