0

在 Django 管理界面中,我想在发布时自动插入登录用户的用户名和博客文章,目前我让它在下拉列表中显示每个用户以供选择,但显然这不是很好,所以我我希望它自动输入这个。

这是我的代码:

模型.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

管理员.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但仍然可以选择另一个用户。

如果您想让它成为只有一个选择的下拉列表(奇怪的行为: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 回答