在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)
非常感谢!
答案 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)