2011-11-03 12 views
7

MyForm.clean()でデータが新しいかどうか、または既に保存されているデータが変更されているかどうかを知るにはどうすればいいですか?Django - フォームデータが新しいか古いデータが変更されているかどうかを知る方法

is_this_new_data()は次のコードのようになりますか?

class MyForm(forms.ModelForm): 
    def clean(self): 
     cleaned_data = self.cleaned_data 
     if is_this_new_data(self): 
      # perform some checks if this is new data 
     else: 
      # do nothing if this is data being modifed 
      return cleaned_data 

答えて

20

self.instance.some_fieldに対してチェックself.cleaned_data['some_field']を確認してください。

オブジェクトが新しいかどうかを確認する簡単な方法は、self.instance.pkに値があるかどうかを確認することです。オブジェクトが既に存在しない限り、Noneになります。

+1

Chrisさん、ありがとうございます。私はDjangoの文書にこのことについて言及していないことに驚いています。私はドキュメントを通過し、運がないとGoogleに質問しました。 –

3

cleanには、変更されたフィールドの名前のリストであるchanged_data属性にアクセスできます。

def clean(self): 
    cleaned_data = self.cleaned_data: 
    for field_name in self.changed_data: 
     # loop through the fields which have changed 
     print "field %s has changed. new value %s" % (field_name, cleaned_data[field_name]) 
     do_something() 
    return cleaned_data 
関連する問題