2016-05-04 19 views
0

私はかなりの数のエラーでいっぱいのプロジェクトに取り組んでいます。私は記事、文書、サードパーティのプラグインなどを手伝ってくれましたが、まだ何か不足しています。 Project: このプロジェクトは、ユーザーが私に連絡するための最後にフォームを備えた単純な1ページのWebサイトです。Djangoフォーム操作

質問: 1.このためのモデルを作成する必要はありますか?ユーザーがフォームに入力した内容をデータベースに保存することをお勧めしますか? 2. "forms.ModelForm"メソッドではなく "forms.Form"を使用してデータベースにユーザー入力を書き込む方法を教えてください。

問題: 私のフォームでは、「件名」のユーザーのオプションに応じて、「件名」を選択すると、より多くのフォームが表示されます。

  1. Djangoは、すべての入力が満たされている場合にのみフォーム全体を有効とマークしますが、オプションがあるためすべての入力が満たされるとは限りません。

コード:誰もが、私は、一般的に全体のコードより良くするために追加することができ代を知っていれば、上記とは別に

forms.py 
class ContactForm(forms.Form): 
    first_name = forms.CharField(widget=forms.TextInput(
     attrs={'class': 'form-control', 'placeholder': 'First Name', 'id': 'first_name', 'name': "first_name"}), 
           max_length=30, min_length=3, required=True,label='') 

    last_name = forms.CharField(widget=forms.TextInput(
     attrs={'class': 'form-control', 'placeholder': 'Last Name', 'id': 'last_name', 'name': "last_name"}), 
           required=True,label='') 

    number = forms.IntegerField(widget=forms.NumberInput(
     attrs={'class': 'form-control', 'placeholder': 'Phone Number', 'id': 'num', 'label': '', 'name': "number"}), 
     label='') 

    email = forms.EmailField(widget=forms.EmailInput(
     attrs={'class': 'form-control', 'placeholder': 'Email', 'id': 'contact', 'label': '', 'name': "email"}), 
          required=True, label='') 

    subject_options = ('Subject', 'Book A Driver', 'Become A Driver', 'Ask A Question') 

    topic = forms.ChoiceField(choices=[(x, x) for x in subject_options], widget=forms.Select(
     attrs={'class': 'form-control', 'placeholder': '', 'id': 'subject', 'label': '', 'name': "subject"}), 
           label='') 

    feedback_options = ('Feedback Means', 'Call', 'Email', 'Email and Call') 
    feedback = forms.ChoiceField(choices=[(x, x) for x in feedback_options], widget=forms.Select(
     attrs={'class': 'form-control', 'placeholder': '', 'id': 'feedback', 'label': '', 'name': "feedback"}), 
           label='') 

    plan_options = ('Plan', 'Hourly', 'Daily', 'Monthly', 'Event Plan') 
    # plan = forms.ChoiceField(choices=[(x, x) for x in plan_options], widget=forms.Select(
    #  attrs={'class': 'form-control', 'placeholder': '', 'id': 'plan', 'label': ''})) 

    enquiry_message = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 
                    'placeholder': 'Ask Us A Question', 'id': 'enquiry', 
                    'name': "enquiry"}), label='') 

    driver_sex_option = ('Driver Sex ', 'Male', 'Female') 
    driver_sex = forms.ChoiceField(choices=[(x, x) for x in driver_sex_option], widget=forms.Select(
     attrs={'class': 'form-control', 'placeholder': '', 'id': 'driver_sex', 'label': '', 'name': "driver_sex"}), 
            label='') 

    # driver_dress_options = ('Driver Dress', 'Casual', 'Official', 'Traditional', 'Any') 
    # driver_dress = forms.ChoiceField(choices=[(x, x) for x in driver_dress_options], widget=forms.Select(attrs={'class': 'form-control', 'placeholder': '', 'id': 'driver_dress', 'label': '', 'name':"driver_dress"})) 

    payment_options = ('Payment Plans', 'Cash', 'Credit Card') 
    payment = forms.ChoiceField(choices=[(x, x) for x in payment_options], widget=forms.Select(
     attrs={'class': 'form-control', 'placeholder': '', 'id': 'pay', 'label': ''}), label='') 

    home_addres = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 
                   'placeholder': 'Home Adress', 'id': 'address', 
                   'name': "address"})) 

    residence_options = ('Years of Residency in Lagos', '1', '2', '3', '4', '5', 'More than 5', 'More than 10') 
    residence_years = forms.ChoiceField(choices=[(x, x) for x in residence_options], 
             widget=forms.Select(
              attrs={'class': 'form-control', 'placeholder': '', 'id': 'residency', 
                'label': '', 'name': "residency"})) 

    lasdri = forms.CharField(widget=forms.TextInput(
     attrs={'class': 'form-control', 'placeholder': 'LASDRI Certificate Number', 'id': 'certification', 
       'name': "certification"}),label='') 

    experience_options = ('Years of Experience', '1', '2', '3', '4', '5', 'More than 5', 'More than 10') 
    experience_years = forms.ChoiceField(choices=[(x, x) for x in experience_options], widget=forms.Select(
     attrs={"class": 'form-control', 'placeholder': '', 'id': 'experience', 'label': '', 'name': "experience"}), 
             required=True, label='') 



views.py: 

    def index(request): 
     form = ContactForm 
     if request.method == "POST": 
      form = ContactForm(request.POST) 
      if form.is_valid(): 
       first_name = form.cleaned_data['first_name'] 
       last_name = form.cleaned_data['last_name'] 
       number = form.cleaned_data['number'] 
       email = form.cleaned_data['email'] 
       subject = form.cleaned_data['topic'] 
       feedback = form.cleaned_data['feedback'] 
       enqiry = form.cleaned_data['enquiry_message'] 
       years = form.cleaned_data['experience_years'] 
       sex = form.cleaned_data['driver_sex'] 
       add = form.cleaned_data['home_addres'] 
       plan = form.cleaned_data['plan'] 
       pay = form.cleaned_data['pay' ] 
       cert = form.cleaned_data['lasdri' ] 
       residence = form.cleaned_data['residence_years'] 

       return HttpResponse('Done') 



    `return render(request, 'information/index.html', {'form': form})` 







template : 


' {% csrf_token %}`<form action="" method="post" > 


      {{ form }} 
      <input type="submit" id="submit_btn" class="btn btn-info btn-lg" placeholder="Contact Us">`enter code here` 
     </form> 

は、idがそれを本当に感謝しています。 私はかなり長いことを知っています。それを許してください。 ありがとうございます。

私はクリスピーフォームを使用して戻った。それは正常に働いた、ありがとう。 問題は、フォームがフォームを検証しておらず、その値をdb内のモデルで設定していないことです。 私はforms.pyを編集しましたが、views.pyはまだ同じです。

一つは応じて、フォーム定義のフィールドを必要とし、フォームの.clean()方法で手動でチェックをしないことです。私は、これはあなたが私はあなたが2つのオプションがあり

答えて

0

をしないのですかを把握助ける役立つことを願って「件名」の値にクライアント側では、ユーザーが「件名」を選択したときに適切なフィールドを表示/非表示にするにはJavaScriptを使用する必要があります。

または、Djangoに複数のフォームを定義することができます。共通の基本フォームを継承した「件名」リストのすべての値に対して1つずつ定義できます。ユーザが「サブジェクト」を選択すると、そのサブジェクトの適切なフォームがJavascriptを使用して表示され、他のすべてのサブジェクトは非表示になります。このアプローチでは、Djangoで必要なフォームフィールドを定義することができます。

どちらがあなたのケースに適しているかは、あなたが「対象」リストがどれくらいの期間存在するかによって決まります。

0

回答1:いいえ。

回答2:あなたは、この問題のための標準的なドキュメントを見てとることができます。https://docs.djangoproject.com/es/1.9/topics/forms/#field-data

問題と最後の質問: 最良の方法は、あなたが要求を取得することができますビューでJavascriptを、後者でフィールドを追加することであり、それに応じて処理してください。 crispy-formsを使用することをお勧めします。これは、すべてのプロセスを本当に簡単にします。

関連する問題