要するに、手書きでのpkのURLを書き換えられた時の対策。get_querysetメソッドをオーバーライドする。
views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic.edit import UpdateView from django.shortcuts import redirect """ 更新画面 """ class HogeUpdateView(LoginRequiredMixin, UpdateView): template_name = 'hoge_update.html' model = Hoge : # ログインしているユーザが作ったもでなければアクセス不可 def get_queryset(self): # このビューで生成されるベースとなるクエリセットを取得 base_qs = super(HogeUpdateView, self).get_queryset() # さらにユーザIDで絞った結果を返す。(存在しないので404が返る) # 条件分岐してエラーページを出しても可 return base_qs.filter(created_by=self.request.user) |
参考サイト)