У меня есть модель с именем Post
и поле с названием owner
(внешний ключ User
). Конечно, только владельцы могут update
или delete
свои собственные сообщения.Django: принцип DRY и UserPassesTestMixin
Это, как говорится, я использую login_required
декоратора в представлениях, чтобы убедиться, что пользователь вошел в систему, но тогда, мне также нужно убедиться, что пользователь пытается update
/delete
вопрос является owner
.
Как я использую Django: Generic Editing Views В документации говорится, что мне нужно использовать Django: UserPassesTestMixin.
Эта валидация будет сделана для изображений update
и delete
. СУХОЙ, каков способ этого? должен ли я создать класс с именем TestUserOwnerOfPost
и создать test_func()
, а затем сделать вид update
и delete
наследовать?
Потому что это то, что я пытался и не работать, код ниже:
from django.views.generic.edit import UpdateView
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import UserPassesTestMixin
class TestUserOwnerOfPost(UserPassesTestMixin):
def test_func(self):
return self.request.user == self.post.owner
class EditPost(UpdateView, TestUserOwnerOfPost):
model = Post
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(EditPost, self).dispatch(*args, **kwargs)
С кода выше, каждый зарегистрированный пользователь в системе может edit
/delete
любой пост. Что я делаю не так? я что-то упускаю? Благодарю.
Большое спасибо за подробное объяснение. И мне имеет смысл ограничивать объекты теми, которые принадлежат пользователю. Просто один быстрый вопрос: для этого мне нужно наследовать 'OwnerQuerysetMixin' до' UpdateView'. Почему это?Я думал, что 'get_queryset' был методом из« UpdateView »и должен быть перезаписан тем, который был у меня в' OwnerQuerysetMixin', с этой мыслью (помиловать меня, если я чего-то не хватает) имеет смысл наследовать 'OwnerQuerysetMixin' после «UpdateView». Вздох, я просто хочу понять, как здесь работает наследование. – gglasses
[Этот вопрос] (http://stackoverflow.com/questions/10018757/how-does-the-order-of-mixins-affect-the-derived-class) может помочь вам понять порядок. – Alasdair