関数ベースビューで、投稿した本人しか見れない様にする方法を紹介します。この手法は、Djangoで必ずと言っていいほど頻出する方法なので知らない方は、ぜひ知っておくといいかと思います。
models.pyにモデル名:「ABC」があり、その中にuserとtitleの2つのフィールドを持っているものとします。
models.py
class ABC(models.Model): user = models.ForeignKey( CustomUser, verbose_name='ユーザー', default=1, on_delete=models.PROTECT, ) title = models.CharField( verbose_name='タイトル', max_length=30, null=True, blank=True, )
方法の紹介
以下のviews.pyの例で紹介します。
@login_required ←ログインユーザーのみがアクセス可能とする def index_view(request): template_name = "index.html" object_list = ABC.objects.filter(user = request.user).order_by('-pk') return render( request, 'index.html', { 'object_list': object_list, ←テンプレート内でobject_listが使用できる } )
上記でobject_list = ABC.objects.filter(user = request.user).order_by(‘-pk’)の部分に注目してください。
この行は、object_list に➀.filter(user = request.user)と➁.order_by(‘-pk’)の二つの条件を加えて、リストデータを渡しています。
➀は、投稿ユーザーuserが、アクセスしているrequest.userと同じもののみ抜粋する。
➁は、pk(プライマリーキー)の順番に並び替える。
上記のように、条件をつなげて記載することで複数の条件を満たしたデーターリストを取得することができるようになるのです。