假设我有一个非常简单的模型:
class School(models.Model):
name = models.CharField(max_length = 100, unique=True)
我希望允许未经身份验证的用户使用模型表单建议更改到School
个对象,但我想将这些更改标记为管理员尚未查看。管理员批准后,我将对现有的School
对象进行建议的更改。
最好的方法是什么?我是否需要继承School
类,可能将其称为UpdateToSchool
并允许用户对此子模型而不是目标模型本身提出建议?
答案 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
对象的更新。
通过这种方式,您可以完全控制哪一个获得批准,拒绝等等,并且您可以跟踪建议等。