2016-08-16 17 views
0

今すぐ頭を上げてください!私はNOOBSVILLEからNOOB-BUSの新鮮なnoobです!モデルフォームからデータを保存するDjango

私は情報を読み込んでそのフォーム情報と頭痛のIMを編集するフォームに取り組んでいます。私は使用しています:

ジャンゴ:1.8 Pyhton:3.5.1 バックエンドは、私がに情報をロードするためにform.ModelFormを使用していますsqliteの

ですが、それは保存に来るとき、私は立ち往生午前場所です。ドキュメンテーションは、すべてを使用するか、1つだけを使用すると非常に混乱します。

この

class EditContact(forms.ModelForm): 
    class Meta: 

    model = Contact 
    #the list of all fields 

    exclude = ['date_modified'] 


    def clean(self): 
     if self.date_of_entry is None: 
      print("looking to see what works") 
      self.date_of_entry = datetime.date.today() 
      return 


    def clean_ContactID(self): 
     #see this line below this comment i dunno what it does 
     ContactID= self.cleaned_data.get('ContactID') 
     print ("cleaning it") 
     # i also dont know what validation code suppose to look like 
     # i cant find any working examples of how to clean data 
     return ContactID 

は現在、主に、よりデフclean_methodsあるforms.pyですが、私は私が使用したいことはすべてを使用する必要がありますどのきれいですが、私の見解ではと思います。

これはview.py

def saveContactInfo (request): 

    #this part i get 
    if request.user.is_authenticated(): 

     ContactID= request.POST['ContactID'] 

     a = ListofContacts.objects.get(ContactID=ContactID) 


     f = EditContact(request.POST,instance=a)  

     print("plz work!") 
     if f.is_valid(): 
      f.save() 
      return render (request,"Contactmanager/editContact.html", {'contactID': contactID}) 
     else: 
      return HttpResponse("something isnt savin") 

    else: 
     return HttpResponse("Hello, you shouldnt ") 

であり、これはmodel.pyある

def clean(self): 

    if self.ConactID is None: 
     raise ValidationError(_('ContactID cant be NULL!')) 

    if self.date_of_entry is None: 
     print("think it might call here first?") 
     self.date_of_entry = datetime.date.today() 
     print (self.date_of_entry ) 

    if self.modified_by is not None: 
     self.modified_by="darnellefornow" 
     print(self.modified_by) 

    if self.entered_by is not None: 
     self.entered_by = "darnellefornow" 
     print(self.entered_by) 
     ContactID = self.cleaned_data.get('ContactID') 

    return 

モデルは、フィールドとすべてが空白=真とヌル= trueを持つタイプがあり、今の上除外されたフィールドを除いてdate_of_entry

andiveは、ビューでis_valid()を呼び出すときにmodels.clean()を呼び出すが、保存に失敗したことを知りました。なぜ私は知りません!私は検証を行う方法を知らない。私は、プロセスと必要なもの、さらにフォームの検証フィールドの例を知りたいと思います。

+0

私は本当にあなたがここで何を求めているのか理解できません。 ContactIDフィールドでカスタム検証を行う必要がない場合は、なぜ 'clean_ContactID()'を定義していますか?あなたは何を達成しようとしていますか? –

+0

正直言って、私はチュートリアルに従っていて、私の個人的なプロジェクトでそれを試していたことが分かりません。だからあなたが言っているのは単にclean()を使うことだけです? 私はまだそれが失敗していると私は理由を知っていません – user1778743

+0

私のフィールドの私の頭痛の解決策を見つけた大丈夫みんなは、日付を入れていたと私は間違った形式で日付を入力していた。 だから、「08/16/2016」と期待していて、「2016/16/08」と入力していた 失敗してしまった。 (妥当性検査) 今後の人々のために!あなたのフォームにデータを入力した方法を見てください。驚くべき日付! – user1778743

答えて

1

あなたのコードコメントを見て、ここでいくつかの情報/回答をしたいと思っています。うまくいけば、これは役に立ちます:

1)あなたは、そのフィールドに特別な何かを特別に扱う必要がある場合、clean_FIELDNAME関数を使う必要があります。 Django docs show this as an example

def clean_recipients(self): 
    data = self.cleaned_data['recipients'] 
    if "[email protected]" not in data: 
     raise forms.ValidationError("You have forgotten about Fred!") 

    # Always return the cleaned data, whether you have changed it or 
    # not. 
    return data 

だからそのブロックで、彼らが提供する電子メールのリストは、特定の電子メールが含まれているかどうかをチェックされています。

2)これはまた、バリデーションを処理する方法についてのあなたのコメントで尋ねた別の質問を示しています。あなたは上のスニペットで、あなたはフォームを提出することができます参照してください.ValidationError。 https://docs.djangoproject.com/en/1.10/ref/forms/validation/

したがって、clean_メソッドまたはmain cleanメソッドのいずれかでエラーが発生した場合、form.is_valid()はfalseになります。

これは役に立ちますか?

+0

okだから私はclean()を使ってすべてのものをきれいにする必要があります! また、マイグレーションを実行した後にクリーンメソッドを追加してマイグレーションを更新できないため、クリーニングでエラーが発生するという副次的な問題はありますか? 私もmodelformを使用していますのでclean()も同様に動作しますか? 私は連絡先の編集に失敗した理由を印刷するためのシステムを手に入れることができますか? と[「c​​ontactID」] イム私はこれだけ、それはあなたのモデルの変更をベースのデータベースと更新に影響を及ぼし移行イムだけで混乱し – user1778743

+0

確かに、知っているたくさんのために求めてself.cleaned_data.getよう いいだろう検証を支援します。あなたのモデルの変更により、フィールドが空でないか空でないために検証が失敗する場合を除き、フォームのクリーンな結果に直接的な影響はないと思います。検証が失敗した理由を確認するには、f.is_valid()をチェックするif条件をデバッグして実行するか、print(f.errors)を使用してコンソールに出力するか、テンプレートにフィールドエラーを表示するかあなたのユーザー(あなたはおそらくやりそうになるでしょう)。 –

+0

Djangoのドキュメントをチェックしてください:https://docs.djangoproject.com/en/1.10/ref/forms/api/#using-forms-to-validate-dataとhttps://docs.djangoproject.com/en/ 1.10/topics/forms /#これらのトピックの詳細については、#working-with-form-templates –

関連する問題