在Django管理网站中自动填充created_by字段
我想在一个非常简单的网页应用中使用Django的管理界面,但遇到了一个不应该太难解决的问题。
考虑以下情况:
class Contact(models.Model):
name = models.CharField(max_length=250, blank=False)
created_by = models.ForeignKey(User, blank=False)
我找不到一种方法来自动填充“创建者”这个字段,并让Django的管理界面知道这个信息。我看到的大多数方法都涉及到重写对象的保存方法,并把请求的用户传进去。这些方法都需要你自己构建视图和/或表单。
理想情况下,在管理网站中创建新联系人的表单应该不显示“创建者”这个字段(这比较简单),并且应该自动填充当前用户的信息(这似乎比想象中要复杂)。
4 个回答
2
我通过重写 Django 管理后台的 save_model 方法来实现这个功能。因为你提到想使用 Django 的管理界面,所以我觉得我的方法最合适。具体步骤如下:
- 首先,在管理后台注册 Contact 模型,并排除 'created_by' 字段。
@admin.register(Contact) class Notice(admin.ModelAdmin): list_display = ('name', 'created_by') exclude = ('created_by', )
- 然后在同一个类 Notice 中重写 save_model 方法。
def save_model(self, request, obj, form, change,): obj.created_by = request.user super().save_model(request, obj, form, change)
4
你需要为这个字段指定一个默认值,在这个情况下,就是调用一个方法来获取当前用户(可以查看认证文档来了解如何获取当前用户)。
33
http://code.djangoproject.com/wiki/CookBookNewformsAdminAndUser
这段话的意思是,你需要在你的ModelAdmin对象上实现保存的方法。