2016-07-16 151 views
0

我正在使用一些django模型条目表单来更新我们网站上发布的一些个人信息。我希望人们通过用他们的用户名登录到/ admin来更新他们自己的传记信息,但我不希望他们能够实时更新网页。我想知道是否有可能当他们更新模型,以便能够通知我,然后我可以用某种manage.py命令行得通。Django:更新模板 - 通知管理员

也许这会更容易建立一个镜像开发网站,然后看到它后,将该信息推送到我们的部署?

回答

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,使您可以跟踪对模型实例所做的更改并还原这些更改。