【问题标题】:Referencing a Django contrib.admin user via a foreign key?通过外键引用 Django contrib.admin 用户?
【发布时间】:2011-07-05 06:29:50
【问题描述】:

我正在开发一个小型 Django 站点,我正在使用 django.contrib.admin 来处理内容管理。我想在文章初始保存时捕获作者(管理员用户)的名字和姓氏(如果其他用户编辑文章,则不更新)。

即。

class Article(models.Model)
    title = models.CharField(max_length=50)
    pub_date = models.DateTimeField('date published')
    author = ForeignKey(???)
    ...

在创建新的 Article 对象时,我需要写什么来获取该用户的名字和姓氏字段?如果这些字段为空,我会默认使用他们的管理员用户名。

【问题讨论】:

标签: django django-admin


【解决方案1】:

我想你正在寻找这个:

author = models.ForeignKey(User)

【讨论】:

    【解决方案2】:

    让你的模型使用 User 对象:

    author = models.ForeignKey(User)
    

    为防止此字段在更新时更改,请查看此其他 SO 帖子:
    Django admin: exclude field on change form only

    要将管理员的选择字段更改为使用名字/姓氏,您可以试试这个 sn-p:
    http://djangosnippets.org/snippets/1642/

    要更改管理员的视图,假设您使用的是内置模板,您可以添加一个自定义列,如本文所述:How do I add a custom column with a hyperlink in the django admin interface?

    class AuthorAdmin(admin.ModelAdmin):
    list_display = ('author_name',)
    
    def my_author_name(self, obj):
        if obj.author.first_name and obj.author.last_name:
            return '%s %s' % (obj.author.first_name, obj.author.last_name)
        else: 
            return obj.author.username
    my_author_name.allow_tags = True
    my_author_name.short_description = 'Author'
    

    【讨论】:

      【解决方案3】:

      看起来处理来自 get_full_name 的 None 或空白结果的最佳方法是使用 models.ForeignKey(User) 填充 User.author,然后在模板级别使用以下内容:

      {{ user.get_full_name|default:user.username }}
      

      ...通过this SO answer。这允许我对用户的文章执行查询,但如果用户尚未输入空白的 first_name 和 last_name 字段,我仍然可以优雅地处理它们,但也会在它们输入时动态更新)。

      【讨论】:

        猜你喜欢
        • 2019-07-02
        • 1970-01-01
        • 2016-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        相关资源
        最近更新 更多