Admin siteのChange listで自分が入力したデータだけを表示する - 基本編
Change listに自分が入力したデータだけを
Admin siteで複数の人数でデータを入力して運用している場合、
Change listに自分のデータのみ表示できれば多少なりとも効率があがります。
Djangoでは少しの手間で実現することが可能です。
仕様
- Userモデルを使用。
- Change listには認証されたユーザのデータのみ表示。
model作成
わかりやすくBlogを例にとって進めます。
models.py
from django.db import models
from django.contrib.auth.models import User
import datetime
class Post(models.Model):
title = models.CharField(max_length = 50)
author = models.ForeignKey(User, related_name = 'posts')
content = models.TextField()
pub_date = models.DateTimeField(default = datetime.datetime.now)
def __unicode__(self):
return self.title
Admin作成
admin.py
from django.contrib import admin
from appname.models import Post
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'pub_date', 'author', )
admin.site.register(Post, PostAdmin)
適用前
テストデータを入れて表示しています。
処理をコーディング
admin.pyに数行追加するだけです。
admin.py
from django.contrib.import admin
from appname.models import Post
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'pub_date', 'author', )
def queryset(self, request): #追加
return Post.objects.filter(author = request.user) #追加
admin.site.register(Post, PostAdmin)
適用後
認証したユーザ(test2)のデータのみ表示されています。
便利になりましたが、不都合になった面もあります。
その対処法はAdmin siteのChange listで自分が入力したデータだけを表示する - 発展編で。
