2017-06-19 3 views
0

Ich habe viele Fragen über Django Validatoren nicht die richtigen Antworten geben, aber ich habe ein anderes Problem. Meins wird nicht einmal ausgelöst, obwohl es aus dem Django-Beispiel kopiert wurde. Hier ist, was ich habe:Django Formular Validierung wird nicht ausgelöst

models.py

def content_file_name(instance, filename): 
    ext = ''.join(filename.split())[:-4] 
    foldername = "%s/%s" % (uuid.uuid4(), ext) 
    return '/'.join(['documents', str(foldername), filename]) 

class Document(models.Model): 
    docfile = models.ImageField(upload_to=content_file_name) 

class DocumentImage(models.Model): 
    imagefile = models.ImageField(upload_to=content_file_name) 
    image = models.ForeignKey(Document, related_name='Image', null=True, on_delete=models.CASCADE) 

views.py

def documentlist(request): 
    # Handle file upload 
    if request.method == 'POST': 
     form = DocumentForm(request.POST, request.FILES) 
     if form.is_valid(): 
      newdoc = form.save() 
      newdoc.create_documentfiles() 
      messages.add_message(request, messages.INFO, "Saved") 
      return HttpResponseRedirect(reverse('list')) 
    else: 
     form = DocumentForm() # A empty, unbound form 

    # Load documents for the list page 
    documents = Document.objects.all() 

    # Render list page with the documents and the form 
    return render(
     request, 
     'list.html', 
     {'documents': documents, 'form': form} 
    ) 

forms.py

class DocumentForm(forms.ModelForm): 

    class Meta: 
     model = Document 
     fields = ('docfile',) 

    def clean_image(self): 
     file = self.cleaned_data.get('docfile') 
     if file: 
      if imghdr.what(file.read()) != "gif": 
       raise forms.ValidationError("Please upload a .gif file") 
       print('complete'); 
      file.seek(0) 
     return file 

Ich habe sogar versucht, die forms.py wie diese Einstellung:

def clean_image(self): 
    print('test') 
    raise forms.ValidationError("Please upload a .gif file") 

Und ich bekomme immer noch weder ValidationError noch test in der Konsole gedruckt. Hat jemand auf ein solches Problem gestoßen?

Antwort

2

Ihr Name Validierungsfunktion ist clean_image, aber es gibt keine image Feld auf Form

fields = ('docfile',) 

So ist es nicht aufgerufen. Es sollte clean_docfile aufgerufen werden, wenn Sie docfile Feld

Die clean_<fieldname>() Methode validieren wollen, ist auf einem Formular Unterklasse genannt - wo <fieldname> mit dem Namen des Formularfeldes Attribut ersetzt wird. Diese Methode führt eine Bereinigung aus, die für dieses bestimmte Attribut spezifisch ist und nicht mit dem Feldtyp zusammenhängt. Diese Methode hat keine Parameter übergeben. Sie müssen den Wert des Felds in self.cleaned_data nachschlagen und sich daran erinnern, dass es zu diesem Zeitpunkt ein Python-Objekt und nicht die ursprüngliche im Formular übergebene Zeichenkette sein wird (es wird in cleaned_data sein, da das allgemeine Feld clean() -Methode ist) , oben, hat die Daten schon einmal bereinigt).

https://docs.djangoproject.com/en/1.11/ref/forms/validation/

+0

Oh, wusste nicht, sie korreliert wurden umbenannt werden. Ich danke dir sehr! –

1

sollte Ihre saubere Methode Namen als

def clean_docfile(self): 
    print('test') 
    raise forms.ValidationError("Please upload a .gif file") 
Verwandte Themen