Вот есть у нас, например, такая моделька:
class CommentWithTitle(Comment): title = models.CharField(max_length=300) @models.permalink def delete_comment_url(self): return ('delete_comment', (), {'comment_id': self.pk,})
И хочется, чтобы пользователь мог редактировать и удалять свои комментарии. Реализуется этот функционал через django-guardian. Если рассматривать случай не с комментарием, а с записью в блоге - то там можно сразу в представлении присваивать нужные права доступа. С комментарием чуть посложнее - своих представлений у нас нет. Интуитивно руки тянутся вписать присваивание прав на экземпляр в конструктор модели:
class CommentWithTitle(Comment): title = models.CharField(max_length=300) def __init__(self, *args, **kwargs): print "new init assign permissions" super(CommentWithTitle, self).__init__(*args, **kwargs) @models.permalink def delete_comment_url(self): return ('delete_comment', (), {'comment_id': self.pk,})
Но оказывается конструктор вызывается не только при добавлении экземпляра в БД, но и при извлечении его оттуда, а это уже как-то не комильфо получается.
Как такие вещи правильно реализуются? Создаётся специальное представление для присваивания прав, на которое при добавлении комментария происходит перенаправление по параметру next, и которое потом тоже перенаправляет пользователя обратно на страницу?