使用Django管理站点自动填充created_by字段

时间:2009-05-13 02:42:01

标签: python django django-models django-admin

我想将Django管理界面用于一个非常简单的Web应用程序,但我无法解决一个不应该难以解决的问题。

请考虑以下事项:

class Contact(models.Model):
    name = models.CharField(max_length=250, blank=False)
    created_by = models.ForeignKey(User, blank=False)

我找不到自动填充created_by字段并让Django管理员知道它的方法。我见过的大多数方法都意味着重载了Object的save方法并将其传递给请求用户。它们都需要构建您的自定义视图和/或表单。

最好在管理网站中创建新联系人的表单不应显示created_by字段(这很容易)并使用当前用户自动填充它(这似乎比应该更难)

4 个答案:

答案 0 :(得分:27)

http://code.djangoproject.com/wiki/CookBookNewformsAdminAndUser

涉及在ModelAdmin对象上实现保存方法。

答案 1 :(得分:4)

您需要为该字段指定default,在这种情况下是一个获取当前用户的方法调用(请参阅auth文档以获取当前用户)。

答案 2 :(得分:1)

我真的想要一个比我在其他地方找到的更好的解决方案,所以我在Populate user Id question上写了一些中间件 - 实现。我的解决方案不需要更改任何表单或视图。

答案 3 :(得分:0)

另一种方法可能是:

author = models.ForeignKey('auth.User',on_delete = models.CASCADE)

注意:这是参考Django 1.11。不能说它可以与其他版本一起使用。