如何在模型窗体的clean
方法中获取文章实例?我尝试了访问self.instance
但它None
.如何获取以前的字段值?
型
class Article(models.Model):
name = models.CharField(max_length=25)
value = models.CharField(max_length=25)
形式
class ArticleForm(forms.ModelForm)
class Meta:
model = Article
fields = '__all__'
def clean(self):
cleaned_data = super().clean()
get_instance = self.instance
print(get_instance) and I get None
视图
def test(request)
form = ArticleForm({'name':'test', 'value':'test'})
if form.is_valid():
print(1)
else:
print(form.errors)
您之所以None
,是因为您没有使用实例实例化表单。
form = ArticleForm({'name':'test', 'value':'test'})
如果使用实例实例化窗体,则可以在clean
方法中使用self.instance
访问它。
article = Article.objects.get(pk=1)
form = ArticleForm({'name':'test', 'value':'test'}, instance=article)
但是,请注意,清理窗体会更改模型实例。如果你想要原始值,你应该从数据库中重新获取实例,例如 original_instance = Art
def clean(self):
cleaned_data = super().clean()
if self.instance is not None and self.instance.pk is not None:
original_instance = Article.objects.get(pk=self.instance.pk)
else:
original_instance = None
...
如果您只想知道哪些字段发生了更改,而不关心它们的原始值,则使用changed_data
属性会更简单。