我有一个带有IntegerField的模型CustomModel
。
class CustomModel(models.Model):
count = models.IntegerField()
当我在管理员中创建CustomModel
的新实例时,我必须进行验证,因此我使用clean
方法并可以访问该值。
def clean(self):
value = self.count
...
我的问题:
当我更改CustomModel的实例时,我只能访问新的更改值,但不能访问原始值。但是,对于我的验证,我必须在实例编辑之前比较新值和值。
我找不到如何获取访问权限的解决方案。有人知道吗?
答案 0 :(得分:6)
为什么不利用ModelForm
?表单数据分两步保存:
所以当你有一个表格时:
class YourForm(forms.ModelForm):
class Meta:
model = CustomModel
fields = ['count',]
def clean(self):
cleaned_data = super(self).clean()
count = cleaned_data.get('count')
if count < self.instance.count:
self.add_error('count', 'You cannot decrease the counter')
return cleanded_data
然后,您可以django
管理网站内的override the form。
答案 1 :(得分:2)
还有一个只使用模型的解决方案:
def clean(self):
if self.pk:
previous_count = self.__class__.objects.get(pk=self.pk).count
else:
previous_count = None # If saving a new instance
self.__class__
访问模型类并获取当前存储的 .count
值。