0

Django 管理インターフェイスで、ログインしているユーザーのユーザー名とブログ投稿を公開時に自動的に挿入したいのですが、現在、すべてのユーザーをドロップダウンに表示して選択していますが、明らかにこれは良くないので、私は''これを自動入力してほしい。

これが私のコードです:

models.py

django.db からモデルをインポート django.contrib.auth.models からユーザーをインポート

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    published_date = models.DateTimeField('date published')
    author = models.ForeignKey(User, db_column="published_who")

    def __unicode__(self):
        return self.title

admin.py

from blog.models import Post
from django.contrib import admin

class PostAdmin(admin.ModelAdmin):

    def save_model(self, request, obj, form, change): 
        obj.author = request.user
        obj.save()

admin.site.register(Post, PostAdmin)

どうもありがとう!

4

2 に答える 2

0

使用する必要があるのは Django ドキュメントにあります: https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

これで、管理者の ForeignKeyField のデフォルトの動作を上書きできます。次のようなもの:

  def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
      if db_field.name == "author":
          kwargs["initial"]  = request.user

       return super(PostAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

※未検証です

編集:

ドロップダウンを完全に無効にするかどうかはわかりませんでした。この方法では、あなたはしません。代わりに、デフォルト値がありますが、request.user別のユーザーを選択できます。

1つだけ選択できるドロップダウンにしたい場合(奇妙な動作:P)、次を追加できます:

kwargs["queryset"] = Post.objects.filter(author=request.user)
于 2012-08-31T11:47:14.270 に答える
0

問題を理解しているので、管理フォームから作成者を除外する必要があります:

class PostAdmin(admin.ModelAdmin):
    exclude = ['author']
于 2012-08-31T11:43:18.217 に答える