2016-09-26 1 views
0

EDIT: J'ai identifié la cause en tant que paquets python fournis avec RHEL 7. La solution consistait à installer une autre version. Dans mon cas, j'ai juste déplacé le serveur à centOS, où le python fourni fonctionne avec django.Pourquoi ma forme django est-elle validée lorsque je n'appelle pas? Is_valid

J'ai une forme que les actions vers ma vue de la maison, il contient deux boutons, enregistrer et annuler. Lorsqu'il est exécuté sur le serveur de développement local (manage.py runserver), cela fonctionne correctement. Lorsque j'ai poussé cela en production, le bouton Annuler renvoie des erreurs de validation de formulaire, même si la méthode is_valid n'est pas appelée.

Voici la vue:

def home(request): 
#uses home.html 
if request.method == 'POST': 
    #Figure out which button was pressed 
    #Cancel Button - Back to home 
    if request.POST.get("cancel"): 
     #return HttpResponseRedirect(request.META.get('HTTP_REFERER')) 
     footer = request 
     lineitems = Budget.build(request.user) 
     c = {'lineitems': lineitems, 
      'footer':footer,} 
     return render(request, 'home.html', c) 
    #Save button on config.html IncomeForm/Expenses Form 
    if request.POST.get("config_save"): 
     #ExpensesForm submitted 
     if 'expenseName' in request.POST: 
      form = ExpensesForm(request.POST) 
      if form.is_valid(): 
       form.save() 
      else: 
       temp = 'config.html'  
       footer = 'Expense Form Invalid' 
       c = {'form':form, 
        'footer':footer,} 
       return render(request, temp, c) 
     #IncomeForm submitted 
     else: 
      form = IncomeForm(request.POST) 
      if form.is_valid(): 
       form.save() 
      else: 
       form = IncomeForm(request.POST) 
       temp = 'config.html'  
       footer = 'Form Invalid' 
       c = {'form':form, 
        'footer':footer,} 
       return render(request, temp, c) 
     #Use Budget Class to populate a table in template 
     Budget.update_data({'months':12, 
          'user':request.user}) 
     temp = 'home.html' 
     footer = '* Line Modified' 
     lineitems = Budget.build(request.user) 
     c = {'lineitems': lineitems, 
      'footer':footer,} 
     return render(request, temp, c) 
# if a GET (or any other method) we'll load the budget 
else: 
    footer = '* Line item modified' 
    footer = request 
    Budget.update_data({'user': request.user, 
         'months':12}) 
    lineitems = Budget.build(request.user) 
    c = {'lineitems': lineitems, 
     'footer':footer,} 
    return render(request, 'home.html', c) 

Voici le modèle:

{% extends "base.html" %} 
{% load bootstrap3 %} 

{% block title %} 
<h1>Add {{ itemtype }}</h1> 
{% endblock %} 

{% block content %} 
<form action="{% url 'home' %}" method="post"> 
{% csrf_token %} 
{{ form.as_p }} 
<div class="btn-group"> 
<input type="submit" name="config_save" value="Save" class="btn btn-primary"/> 
<input type="submit" name="cancel" value="Cancel" class="btn btn-default"/> 
</div> 
</form> 
{% endblock %} 
{% block footer %} 
{{ footer }} 
{% endblock %} 

EDIT *

j'ai pu recréer cette question dans l'environnement dev quand je l'ai remplacé

{{ form.as_p }} 

Avec

{% bootstrap_form form layout='vertical' %} 

Malheureusement, ni l'un ni l'autre ne fonctionnait sur le serveur apache/wsgi.

Voici mes formes. Note J'ai aussi essayé de supprimer la classe: form-control et cela n'a fait aucune différence. J'ai un autre formulaire et une vue qui se comporte presque identique à cela (annuler est géré avec un autre, forme est modelform) qui fonctionne, la seule différence étant qu'il n'y a pas de champs de date. Pour exclure que ce soit le problème, j'ai exclu les champs de date mais j'avais toujours le même problème.

#Edit form to add/edit Expenses and Bills 
class ExpensesForm(forms.ModelForm): 
    class Meta: 
     model = Items 
     exclude = ('skiplst',) 
     widgets = {'user': forms.HiddenInput(), 
        'itemType': forms.HiddenInput(), 
        'itemName': forms.TextInput(attrs={'class':'form-control',}), 
        'category': forms.Select(attrs={'class':'form-control',}), 
        'itemAmount': forms.NumberInput(attrs={'class':'form-control',}), 
        'payCycle': forms.Select(attrs={'class':'form-control',}), 
        'itemNote': forms.TextInput(attrs={'class':'form-control',}), 
        'nextDueDate': forms.DateInput(attrs={'name': 'date', 
                 'class':'form-control'}), 
        'endDate': forms.DateInput(attrs={'name': 'date', 
                'class':'form-control'})} 

#Edit form to add/edit Income Sources 
class IncomeForm(forms.ModelForm): 
    class Meta: 
     model = Items 
     exclude = ('category','skiplst') 
     widgets = {'user': forms.HiddenInput(), 
        'itemType': forms.HiddenInput(), 
        'itemName': forms.TextInput(attrs={'class':'form-control',}), 
        'itemAmount': forms.NumberInput(attrs={'class':'form-control',}), 
        'payCycle': forms.Select(attrs={'class':'form-control',}), 
        'itemNote': forms.TextInput(attrs={'class':'form-control',}), 
        'nextDueDate': forms.DateInput(attrs={'name': 'date', 
                 'class':'form-control'}), 
        'endDate': forms.DateInput(attrs={'name': 'date', 
                'class':'form-control'})} 
+0

postez vos retraçages s'il vous plaît. – itzMEonTV

+0

Il n'y a pas de traceback, le code s'exécute normalement. – Edyoucaterself

+0

à quoi ressemblent vos formulaires? – yedpodtrzitko

Répondre

0

Il ressemble (un peu difficile de dire que la mise en forme/retrait est éteint légèrement) lorsque votre formulaire présente la valeur annulation, il est de soumettre Cancel, et vous vérifiez pour cancel, de sorte que la logique est jamais réalisé.

+0

J'ai légèrement modifié la logique dans la vue, maintenant elle cherche config_save, et le reste va à une autre instruction qui redirige vers la vue home, toujours les mêmes résultats. Je peux aussi vérifier qu'il n'exécute pas le code pour config_save comme si je remplissais le formulaire et que je cliquais sur annuler cela n'ajoute pas d'enregistrement à la base de données. J'ai édité ma question tout à l'heure, je crois que cela a quelque chose à voir avec le bootstrap/formatage du template. – Edyoucaterself