Python Django:基于特定条件拒绝模型保存
我有一个Django模型,非常简单:Python Django:基于特定条件拒绝模型保存,python,django,Python,Django,我有一个Django模型,非常简单: class Person(models.Model): name = models.CharField(max_length=100) 如果实际名称更改,我想拒绝保存此模型,但我想允许更改资本化。例如: SAM -> sAm: allowed Sam -> SAM: allowed Sam -> John: not allowed 我如何覆盖我的个人模型的save()方法,从而拒绝此类编辑?特别是,我正在努力解决以下问题: 正在
class Person(models.Model):
name = models.CharField(max_length=100)
如果实际名称更改,我想拒绝保存此模型,但我想允许更改资本化。例如:
SAM -> sAm: allowed
Sam -> SAM: allowed
Sam -> John: not allowed
我如何覆盖我的个人模型的save()
方法,从而拒绝此类编辑?特别是,我正在努力解决以下问题:
save()
方法访问对象的预保存版本请自行回答问题的任何部分,并提前感谢 我会在“clean”方法中使用一个表单和一些自定义验证: 例如:
class MyForm(ModelForm):
class Meta:
model = MyModel
def clean(self):
cleaned_data = self.cleaned_data
name = cleaned_data.get("name ")
if name == ###:
#custom validition checking here
raise forms.ValidationError('You can only capitalize.')
return cleaned_data
有两种很好的方法可以检测字段是否已更改并执行某些操作
在您的情况下,您需要对其进行修改,以便不仅检测字段是否已更改,而且还检测它是否是您希望允许的更改。这是一个很好的答案,谢谢,但我确实希望在模型级别而不是在特定的表单上强制执行此操作。谢谢,其中一个答案非常有效。您知道有什么方法可以从
save()
方法将一条好消息传递回用户界面吗?看起来您不能使用Django中的内置消息,因为您无权访问请求
对象。@Samsave()
可以在不调用请求
的情况下调用,例如在Python shell中,它不是访问保存
中请求的正确位置。