У меня есть модель django с именем archive
, которая связана с group
(django auth) с помощью внешнего ключа. Чтобы пользователь мог что-то редактировать в этом архиве, они должны иметь разрешение на это через django-guardian
. Я могу связать архив с группой, как показано в моем коде ниже, однако мне нужно иметь возможность устанавливать для каждого объекта объекты-объекты (архивы). Я пытаюсь сделать это, используя сигнал post_save
или post_delete
(для правильной защиты от сиротских разрешений).Django Assign-perm w/Post-Save Signal
Другими словами, вот шаги, которые я хочу выполнить. Посетите страницу администратора. Создать/Редактировать экземпляр Archive
. Укажите на этой странице, какая группа пользователей будет связана с этим конкретным Archive.
. При сохранении этого экземпляра Django должен автоматически аутентифицировать указанную группу с разрешениями «читать» для этого экземпляра Archive.
В каком файле я могу хранить Archive_post_save_handler
? models.py? Как бы то ни было, я не могу назначить групповые разрешения, потому что я думаю, что мне не удается передать объекты через мои функции. Как я могу это сделать? Как вопрос с бонусом, будет ли этот крючок применяться, если я отредактировал модель через оболочку?
models.py
from django.db import models
from django.contrib.auth.models import Group
from django.db.models.signals import *
from django.dispatch import receiver
class Archive(models.Model):
name = models.CharField(max_length = 30)
nickname = models.CharField(max_length = 30, blank=True)
Group = models.ForeignKey(Group, blank=True, null=True, help_text='A group of users that are allowed access to the archive. This should typically be called the same thing as the archive name.')
class Meta:
permissions = (
('read', 'Read Archive'),
)
def __unicode__(self):
return self.name
@receiver(post_save, sender=Archive)
def Archive_post_save_handler(sender, instance, **kwarks):
group = Group.objects.get(name=instance.Group)
assign_perm('read', group, instance) #what I primarily want to accomplish in this question is on this line
Моя проблема, похоже, устраняет фразу 'archive' в' assign_perm ('read', group, archive) '. Я не думаю, что у меня есть правильная переменная. – mh00h