0

我创建了一个博客应用程序,其模型具有这样的作者字段:

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)

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

我已经为此工作了几个小时,但没有成功。请帮忙!

非常感谢小伙伴们。

4

1 回答 1

2

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

# 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)
于 2012-04-22T04:51:24.610 回答