Admin siteのChange listで自分が入力したデータだけを表示する - 基本編

Change listに自分が入力したデータだけを

Admin siteで複数の人数でデータを入力して運用している場合、
Change listに自分のデータのみ表示できれば多少なりとも効率があがります。
Djangoでは少しの手間で実現することが可能です。

仕様

  1. Userモデルを使用。
  2. 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)

適用前

Adminsite01

テストデータを入れて表示しています。

処理をコーディング

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)

適用後

Adminsite02

認証したユーザ(test2)のデータのみ表示されています。

便利になりましたが、不都合になった面もあります。
その対処法はAdmin siteのChange listで自分が入力したデータだけを表示する - 発展編で。

twitter 2009-04-23 19:45:56.744165

関連ページ

参照サイト

Recent Updates

URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Markdownの入力補助"wmd"をAdmin siteで使う
ModelFormでfieldのwidgetを変更する
動的なformを作る 6 - Dynamic Inline Admin site編
Formsetsを使う3 - inlineformset_factory編
動的なformを作る 5 - django-dynamic-formset編
Formクラスからメディアを定義する
複数のmodelを結合する 2 - Proxy model編
複数のmodelを結合する 1
ModelFormでfieldの表示順番を変える
Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更する
Admin siteのlist_displayをカスタマイズする - リンク編
Admin siteのlist_displayをカスタマイズする - 基本編
Admin siteのTextareaの高さを自在に変更する - admin.py編