2017-10-13 2 views
0

J'ai perdu beaucoup de temps à ce sujet et finalement demander de l'aide dans ce grand forum. Je suis un démarreur de django et travaille sur un formulaire qui prend les détails de l'utilisateur et valide en remplaçant la méthode propre pour les champs. Les problèmes ont commencé à apparaître lorsque j'ai essayé d'utiliser ajax. Veuillez me guider, je n'arrive pas à comprendre pourquoi la valeur is_valid() dans ma vue est vraie, bien que la fonction de vue appelle sur l'objet AdrressForm contenant toutes les méthodes de validation.Validation de champ par défaut de Django se faisant passer dans les appels ajax

// IN my views.py// 
@transaction.atomic 
def update_profile_address(request): 
    user = request.user 
    if request.method == 'POST': 
     address_form = AddressForm(request.POST, instance=user.profile) 
     if address_form.is_valid(): 
      address_form.save() 
      response_data = {"success_message": " Details Saved Successfully."} 
      return HttpResponse(
      json.dumps(response_data), 
      content_type="application/json" 
      ) 
    else: 
     address_form = AddressForm(instance=user.profile) 
    return render(request, 'update_profile_address.html', { 
     'address_form': address_form, 
     }) 

//in my forms.py // 
class AddressForm(forms.ModelForm): 
    class Meta: 
     model = Profile 
     fields = ('address_city', 'address_state','address_country','address_pin') 
     labels = { 
        'address_city': 'City', 
        'address_state':'State', 
        'address_country': 'Country', 
        'address_pin':'Pincode', 
     } 
     widgets = { 
      'address_city': forms.TextInput(
       attrs={ 'required': True, 'placeholder': 'your city'} 
      ), 
      'address_state': forms.TextInput(
       attrs={'required': True, 'placeholder': 'Madhya Pradesh'} 
      ), 
      'address_country': forms.TextInput(
       attrs={ 'required': True, 'placeholder': 'India'} 
      ), 
      'address_pin': forms.TextInput(
       attrs={ 'required': True, 'placeholder': 'your pin code'} 
      ), 
     } 

     def clean_address_city(self): 
      address_city = self.cleaned_data['address_city'] 
      print(address_city) 
      if not address_city.isalpha(): 
       raise forms.ValidationError('Location can be alphabetic only.') 
      return address_city 

     def clean_address_state(self): 
      address_state = self.cleaned_data['address_state'] 
      if not address_state.isalpha(): 
       raise forms.ValidationError('State can be alphabetic only.') 
      return address_state 

     def clean_address_country(self): 
      address_country = self.cleaned_data['address_country'] 
      if not address_country.isalpha(): 
       raise forms.ValidationError('Country name can be alphabetic only.') 
      return address_country 

     def clean_address_pin(self): 
      address_pin = self.cleaned_data['address_pin'] 
      if not address_pin.isnumeric(): 
       raise forms.ValidationError('Pin can be numeric only.') 
      return address_pin 

// ajax call // 
    $("#tab2_2").click(function(event){ 
     event.preventDefault(); 
     $('li.active').removeClass('active'); 
     $(this).closest('li').addClass('active'); 
     var url = $(this).attr('href'); 
     $.ajax({ 
      url: url, 
      success: function(data){ 
       document.getElementById("inner-content").innerHTML = data; 
       $('#address-form').submit(function(event){ 
        event.preventDefault(); 
        console.log('form submission prevented'); 
        address_form_submit(); 

       }) 

      } 

     }); 
    }); 

    function address_form_submit(){ 
     console.log($('#address-form').serialize()); 

     $.ajax({ 
        url:"{% url 'update_profile_address' %}", 
        type:"POST", 
        /*data : { address_city : $('#address_city').val(), 
          address_state: $('#address_state').val(), 
          address_country:$('#address_country').val(), 
          address_pin:$('#address_pin').val(), 
          csrfmiddlewaretoken : '{{ csrf_token }}' 
        }, */ 
        dataType: "json", 
        data: $('#address-form').serialize(), 
        success: function(json){ 
        console.log(json); 
        var msg_box = document.getElementById('message-box'); 
        if (json.success_message) { 
         msg_box.innerHTML = json.success_message; 
         $('#message-box').addClass("alert-success"); 


        }; 


        } 
       }) 

    }; 

Répondre

0

Problème d'indentation. Vos méthodes propres sont à l'intérieur de la classe Meta.