Django:更新模板 - 通知管理员

时间:2016-07-16 04:53:59

标签: django django-models django-forms django-admin

我使用了一些django模型参赛表格来更新我们网站上发布的一些传记信息。我希望人们通过用他们的用户名登录/ admin来更新他们自己的传记信息,但我不希望他们能够实时更新网页。我想知道当他们更新模型以便能够通知我时它是否可行,然后我可以通过某种manage.py命令来解决这个问题。

也许更容易设置镜像开发站点,然后在看到它之后将该信息推送到我们的部署中?

1 个答案:

答案 0 :(得分:1)

首先,不允许您的用户登录管理员,这不是它的目标:

  

Django最强大的部分之一是自动管理界面。它从您的模型中读取元数据,以提供快速,以模型为中心的界面,可信用户可以管理您网站上的内容。 管理员的推荐用途仅限于组织的内部管理工具。它并非用于构建整个前端。

- Django Admin Official Reference

考虑到管理员仅限于"受信任的用户",无需验证他们的输入。

您应该在前端创建表单(例如,在用户的个人资料空间中)。

要在此表单中验证其输入,您有几个选项。最简单的可能是创建一个ModerationModel,如下所示:

class ModerationModel(models.Model):

    STATUS_CHOICES = [
        ('pending', _("Pending"),
        ('accepted', _("Accepted"),
        ('rejected', _("Rejected"),
    ]

    submitter = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)
    submitter_ip = models.GenericIPAddressField()
    date_submitted = models.DateTimeField(auto_now_add=True)
    status = models.CharField(max_length=20, choices=STATUS_CHOICES)
    form_class = models.CharField(
        max_length=100,
        help_text=_(
            "Python dotted path to the Form class. Example: "
            "myapp.forms.UserBiographyForm"
        ),
    )
    form_data = models.TextField(
        help_text=_(
            "Serialized form data"
        ),
    )

提交表单时,您将调用自定义方法来创建包含序列化表单数据的form.save()实例,而不是调用ModerationModel方法。然后,您将能够反序列化表单数据,重建表单实例并在验证后保存它。

其他解决方案可能是使用django-simple-history等第三方应用,可让您跟踪对模型实例所做的更改并还原更改。