2016-03-02 18 views
1

我已覆蓋Django Registration app並在註冊表單中添加了一些自定義字段。如何在Django註冊自定義字段中爲特定情況設置required = false

我已添加功能,在選擇特定值時,必填字段將隱藏。我現在成功了,現在我想刪除我的特定領域的required

我已經嘗試了以下等多種途徑,但是,從下拉列表中值的選擇,需要現場隱藏,但是,點擊signup按鈕,我得到

enter image description here

下面是我的代碼:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
    <script> 
     $('#id_type').change(function(){ 

     var type = $(this).val(); 
     if(type === "dealer"){ 
      $('#id_dealership_name').show(); 
      $("label[for='id_dealership_name']").show(); 
     } 
     else{ 
      $("#id_dealership_name").removeAttr("required") 
      $('#id_dealership_name').hide(); 
      $("label[for='id_dealership_name']").hide(); 
     } 
     }); 

    </script> 

編輯1

form.py

class DealerForm(forms.ModelForm): 
    class Meta: 
     model = Dealer 
     exclude = ('user', 'site') 

    def __init__(self, *args, **kwargs): 
     super(DealerForm, self).__init__(*args, **kwargs) 
     self.fields['dealership_name'].required = False 

EDIT 2

views.py

class DealerRegistrationView(RegistrationView): 
    def __init__(self, **kwargs): 
     super(DealerRegistrationView, self).__init__(**kwargs) 
     RegistrationForm.base_fields.update(DealerForm.base_fields) 

    form_class = RegistrationForm 

    def register(self, form): 
     new_user = super(DealerRegistrationView, self).register(form) 

     if Site._meta.installed: 
      site = Site.objects.get_current() 
     if form.cleaned_data['type'] == "dealer": 
      new_dealer = Dealer(
       user=new_user, 
       site_id=site.id, 
       whatsapp=form.cleaned_data['username'], 
       dealership_name=form.cleaned_data['dealership_name'], 
      ).save() 
+0

重寫模板(HTML)是不夠的;你實際上需要重寫表單本身。 – Selcuk

+1

我已經覆蓋了表單並在其中添加了一些自定義字段,現在我想隱藏並根據「下拉列表」選擇對某些字段進行必需= false。 –

+0

在這種情況下,使用JQuery將'required = False'設置爲(.py)級別並將'required'HTML屬性設置爲'true'會更好。 – Selcuk

回答

0

forms.py解決它通過更改,然後應用JavaScript,它爲我工作。

from django import forms 
from registration.forms import RegistrationForm, RegistrationFormUniqueEmail 


class DealerForm(RegistrationFormUniqueEmail): 
    type = forms.ChoiceField(required=True, choices=(
     ('dealer', 'Dealer'), 
     ('marketing_agent', 'Marketing Agent'), 
     ('private_seller', 'Private Seller'), 
     ('virtual_dealer', 'Virtual Dealer') 
    )) 
    dealership_name = forms.CharField(required=False, max_length=50) 
    subdomain_name = forms.CharField(required=False, max_length=50) 
    banner_image = forms.ImageField(required=False) 
    logo_image = forms.ImageField(required=False) 
相關問題