我创建了一个博客应用,其模型的作者字段如下:
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字段。最后,当我成功完成这项任务时,我想隐藏这个选择。记录的用户不得更改将条目发送到博客的用户。
我在这方面工作了好几个小时没有成功。求救!
非常感谢队友。
答案 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)