関数ベースビューで、投稿した本人しか見れない様にする方法を紹介します。この手法は、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(プライマリーキー)の順番に並び替える。
上記のように、条件をつなげて記載することで複数の条件を満たしたデーターリストを取得することができるようになるのです。
