【问题标题】:Can a Django model automatically fill in the current authenticated user from the admin interface?Django 模型可以从管理界面自动填写当前经过身份验证的用户吗?
【发布时间】:2010-10-26 00:37:48
【问题描述】:

在从管理界面使用 Notes 时,我希望能够在注释中包含对当前已通过身份验证的用户的引用。该模型看起来像:

from django.db import models
from django.contrib.auth.models import User
from datetime import datetime



class Note(models.Model):
    datetime = models.DateTimeField(default=datetime.now)
    author   = models.ForeignKey(User, default=authenticated_user)
    note     = models.TextField()

    def __unicode__(self):
        return unicode(self.author) + u' - ' + unicode(self.datetime)

用户应该看到的唯一字段是注释文本字段。日期时间和作者应该由模型、管理界面或其他任何东西自动填写。这可以做到吗?谁有一些示例代码?

谢谢!

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    可以通过在日期时间字段定义中指定auto_now_add=True 来处理日期的设置。

    要在管理员中设置用户保存,请在您的管理员类中执行此操作:

    class NoteAdmin(admin.ModelAdmin):
        ...usual admin options...
    
        def save_model(self, request, obj, form, change):
            obj.user = request.user
            obj.save()
    

    【讨论】:

    • 这应该可以,但是如果您想在保存之前在表单中显示用户字段怎么办?
    • 您真的要为用户显示一个可编辑字段吗?它是一个外键,所以您是否想要一个包含所有可用用户的选择框,但当前用户已预先选择?如果是这样,我想您可以尝试在您的 ModelAdmin 类上覆盖 add_view 以传入额外的初始字段 - 请查看 django.contrib.admin.options 的代码。如果你只想显示用户名,你可以在模板中使用 {{ request.user }}。
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    相关资源
    最近更新 更多