在blog app的管理空间中自动选择作者foreignkey字段

时间:2012-04-22 04:32:55

标签: python django blogs admin

我创建了一个博客应用,其模型的作者字段如下:

author = models.ForeignKey(User)

我正在尝试修改django admin中的默认添加视图,以便获取添加的帖子以记录的名字用户。怎么样?这样:

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'author':
        kwargs['initial'] = request.user.id
        return db_field.formfield(**kwargs)

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

好吧,在添加视图中,与作者字段对应的选择输入显示用户名。我希望这个select显示first_name + last_name字段而不是username字段。最后,当我成功完成这项任务时,我想隐藏这个选择。记录的用户不得更改将条目发送到博客的用户。

我在这方面工作了好几个小时没有成功。求救!

非常感谢队友。

1 个答案:

答案 0 :(得分:2)

使作者外键字段显示User.first_name + User.last_name的一种方法是在作者中使用User的代理模型:

# your_app.models
from django.contrib.auth.models import User


class AuthorUser(User):
    class Meta:
        proxy = True

    def __unicode__(self):
        return '%s %s' % (self.first_name, self.last_name)


class YourModel(models.Model):
    author = models.ForeignKey(AuthorUser)

要使该字段消失,您只需将其标记为editable = False即可。希望能帮到你。

修改 在Django 2.0中,您需要on_delete参数才能使用ForeignKey

class YourModel(models.Model):
    author = models.ForeignKey(AuthorUser, on_delete=models.CASCADE)