Как сие правильно сделать?
Вот есть у нас, например, такая моделька:
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, и которое потом тоже перенаправляет пользователя обратно на страницу?
Отредактировано S (Фев. 26, 2013 10:03:19)