2017-12-10 6 views
0

alle!
Beim Implementieren der Funktionen zum Bearbeiten/Hinzufügen der App habe ich festgestellt, dass Django in einigen Klassen meine Methode clean_ < Feldname> ignoriert. Beim Debuggen habe ich festgestellt, dass die Methoden nicht einmal aufgerufen werden. Hier ist der entsprechende Code-Schnipsel:
models.pyDjango 1.11: nicht sauber Formularfeld

class StoredItem(models.Model): 
    item = models.ForeignKey(Item) 
    quantity = models.IntegerField(default=0) 

    class Meta: 
     ordering = ["item"] 

    def __str__(self): 
     return "{0} - {1}, {2} pcs.".format(self.item.serial, self.item.name, self.quantity) 

    def get_absolute_url(self): 
     return reverse('almacen:storeditem-detail', args=[str(self.id)]) 

forms.py

# Stored items related forms 
class NewOrEditStoredItemForm(forms.Form): 
    item = forms.ModelChoiceField(queryset=StoredItem.objects.all()) 
    quantity = forms.IntegerField() 

    def clean_item(self): 
     item = self.cleaned_data['item'] 
     storeds = map(lambda x: x.item, StoredItem.objects.all()) 
     if item in storeds: 
      raise ValidationError(_("This item has already been stored - you only can change its quantity in the stock!")) 

    def clean_quantity(self): 
     quantity = self.cleaned_data['quantity'] 
     if quantity < 0: 
      raise ValidationError(_("Items quantity can not be negative!")) 
     return quantity 

views.py

# Stored items related --------------------------------------------------------------------- 
class CreateStoredItem(CreateView): 
    model = StoredItem 
    fields = '__all__' 


class UpdateStoredItem(UpdateView): 
    model = StoredItem 
    fields = '__all__' 

storeditem_form.html

{% extends 'base_template.html' %} 

{% block header %} 

    <h2 id="center">Stocked item add/delete </h2> 

{% endblock %} 

{% block content %} 

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

     <table> 
      {{ form.as_table }} 
     </table> 

     <input type="submit" value="Submit"/> 

    </form> 

{% endblock %} 

EDIT gelöst durch die Klassen in Funktionen neu zu schreiben. Für Klassen wurde mir empfohlen, Validatoren zu verwenden, aber die Funktionen funktionierten trotzdem, wie ich es brauchte.

Antwort

0

Gelöst durch das Umschreiben der Klassen in Funktionen. Für Klassen wurde mir empfohlen, Validatoren zu verwenden, aber auf jeden Fall funktionierten die Funktionen wie benötigt