I have a model named Post
and have a field there called owner
(foreign key to User
). Of course, only owners can update
or delete
their own posts.
That being said, I use login_required
decorator in the views to make sure the user is logged in but then, I also need to make sure the user trying to update
/delete
the question is the owner
.
As I'm using Django: Generic Editing Views the documentation says I need to use Django: UserPassesTestMixin.
This validation will be done for the update
and delete
views. DRY, what is the way to go about this? should I create a class named TestUserOwnerOfPost
and create a test_func()
and then make the update
and delete
views inherit from it?
Cause that's what I have tried and didn't work, code below:
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)
With the code above, every logged-in user in the system can edit
/delete
any post. What am I doing wrong? am I missing something? thanks.