私はPost
というモデルを持ち、owner
(User
への外部キー)と呼ばれるフィールドを持っています。もちろん、所有者だけがupdate
またはdelete
の投稿を投稿することができます。言われて、私は、ユーザーがログインしているが、その後、私はまたupdate
/delete
に質問をしようとするユーザーがowner
であることを確認する必要があることを確認するビューでlogin_required
デコレータを使用することをDjango:DRY原則とUserPassesTestMixin
。
私はドキュメント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
任意のポスト:私が試してみましたし、うまくいきませんでした何
原因、以下のコード。私は間違って何をしていますか?私は何かを欠いている?ありがとう。
あなたの詳細な説明をいただき、ありがとうございます。そして私には、オブジェクトがユーザーが所有するものに制限するのが理にかなっています。ただ一つの簡単な質問です。これがうまくいくためには、 'UpdateView'の前に' OwnerQuerysetMixin'を継承する必要があります。何故ですか?私は 'get_queryset'は' UpdateView'からのメソッドであり、 'OwnerQuerysetMixin'のメソッドでその考え方を上書きするべきだと思っていました。(私が何か不足していると私を赦してください)' OwnerQuerysetMixin'を継承する方が意味があります。 'UpdateView'の後に。一言、私はちょうど相続物がここでどのように働くかについて明確にしたい。 – gglasses
[この質問](http://stackoverflow.com/questions/10018757/how-does-the-order-of-mixins-affect-the-ivedived-class)注文を理解するのに役立つかもしれません。 – Alasdair