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

Django 允许未经身份验证的用户建议更改,但在更改对象之前请等待管理员批准,django,django-forms,Django,Django Forms,假设我有一个非常简单的模型: class School(models.Model): name = models.CharField(max_length = 100, unique=True) 我希望允许未经身份验证的用户使用modelform来建议对学校对象进行更改,但我希望将这些更改标记为管理员尚未看到。管理员批准后,我将对现有的School对象进行建议的更改 最好的方法是什么?我是否需要对学校类进行子类化,或者将其称为更新学校,并允许用户对该子类模型而不是目标模型本身提出建议?

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

class School(models.Model):
    name = models.CharField(max_length = 100, unique=True)
我希望允许未经身份验证的用户使用modelform来建议对
学校
对象进行更改,但我希望将这些更改标记为管理员尚未看到。管理员批准后,我将对现有的
School
对象进行建议的更改


最好的方法是什么?我是否需要对
学校
类进行子类化,或者将其称为
更新学校
,并允许用户对该子类模型而不是目标模型本身提出建议?

这里有一种方法可以解决这个问题,即使用
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
类建议的学校编辑(对象):
school=models.ForeignKey(school)#您可以使用通用外键将其扩展到任何类型,而不仅仅是school
field=models.CharField(选项=)
value=models.TextField()
user=models.ForeignKey(user,null=True,blank=True)#如果您还想批准登录用户
主持人_已批准=models.BooleanField()
approver=模型。ForeignKey(用户)
#你还想追踪什么
现在,在视图中进行编辑时,可以创建此类型的对象,而不是更新现有对象。一旦主持人批准,一个
post_save
信号可能会触发
学校
对象的更新


这样,你就可以完全控制哪一个被批准,哪一个被拒绝等等,并且你可以跟踪建议等等

谢谢!这非常适合用户建议更改文本字段。但是,如果我希望用户能够建议对其他字段类型(如ForeignKey字段或许多字段)进行更改,该怎么办?有什么办法吗?我想我得分开处理。我可以有一个提议的变更模型来处理纯文本模型,还有一个单独的模型来处理更复杂的字段。它是一个内部模型,因此可以根据需要存储键值。Foreignkey可能只是一种替代表示。此外,还可以将故事引用类型更改为通用外键