如何在我的模型表单的clean
方法中获取Article实例?我尝试过访问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)
答案 0 :(得分:1)
您得到None
,因为您没有使用实例实例化表单。
form = ArticleForm({'name':'test', 'value':'test'})
如果您使用实例实例化表单,则可以使用self.instance
方法中的clean
访问该表单。
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
属性会更简单。