允许未经身份验证的用户建议更改,但在更改对象之前请等待管理员批准

时间:2017-05-20 14:48:03

标签: django django-forms

假设我有一个非常简单的模型:

class School(models.Model):
    name = models.CharField(max_length = 100, unique=True)

我希望允许未经身份验证的用户使用模型表单建议更改School个对象,但我想将这些更改标记为管理员尚未查看。管理员批准后,我将对现有的School对象进行建议的更改。

最好的方法是什么?我是否需要继承School类,可能将其称为UpdateToSchool并允许用户对此子模型而不是目标模型本身提出建议?

1 个答案:

答案 0 :(得分:1)

以下是解决此问题的一种方法,即拥有一个SuggestedSchoolEdits(或类似的东西)类,其中包含以下属性:

class SuggestedSchoolEdits(object):
    school = models.ForeignKey(School) #You could use generic foreign key to extend this to any type - not just school
    field = models.CharField(choices=<list of fields user can edit>)
    value = models.TextField() 
    user = models.ForeignKey(User, null=True, blank=True) #if you want approval for logged in users too
    moderator_approved = models.BooleanField()
    approver = models.ForeignKey(User)
    #Whatever else you wish to track

现在,在进行编辑时,在视图中,您可以创建此类型的对象,而不是更新现有对象。主持人批准后,post_save信号可能会触发School对象的更新。

通过这种方式,您可以完全控制哪一个获得批准,拒绝等等,并且您可以跟踪建议等。