自动插入登录用户Django中的用户名

时间:2012-08-31 11:11:24

标签: python django

在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)

非常感谢!

2 个答案:

答案 0 :(得分:0)

据我所知,您需要从管理员表单中排除作者:

class PostAdmin(admin.ModelAdmin):
    exclude = ['author']

答案 1 :(得分: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)