Hvordan til at gøre FileField i django valgfri?

Jeg har en form med en tekstboks, og filefield i django. Det bør lade den bruge enten indsætte teksten i denne rubrik eller uploade en fil. Hvis brugeren ikke har indsat tekst i boksen, behøver jeg ikke at tjekke fileField.

Hvordan gør jeg former.FileField() valgfri?

OriginalForfatteren tamizhgeek | 2011-05-09

2 svar

  1. 40

    Hvis du bruger en forms.FileField() i en forms.Form afledte klasse, kan du indstille:

    class form(forms.Form):
        file = forms.FileField(required=False)

    Hvis du bruger en models.FileField() og har en forms.ModelForm tildelt til denne model, kan du bruge

    class amodel(models.Model):
        file = models.FileField(blank=True, null=True)

    Som du bruger, afhænger af hvordan du er, der følger den form, og hvis du bruger den underliggende ORM (det vil sige en model).

    Tak! det løser mit problem 🙂
    Jeg har læst på steder, der CharFields ikke burde have null=True… da FileFields er væsentlige CharFields, er det virkelig den vej at gå?

    OriginalForfatteren

  2. 0

    hvis du vil gøre dette, før brugeren indsender formularen, vil du nødt til at gøre det ved hjælp af javascript(jquery, mootools osv., som alle tilbyder nogle hurtige metoder til at)

    på django side du kan gøre det i en ren metode i form. Dette bør få dig i gang, og du bliver nødt til at vise dem validering fejl på din skabelon for brugeren at se dem. Navnet på den rene metode skal svare til den form område navn med “clean_” foran.

    def clean_textBoxFieldName(self):
      textInput = self.cleaned_data.get('textBoxFieldName')
      fileInput = self.cleaned_data.get('fileFieldName')
    
      if not textInput and not fileInput:
        raise ValidationError("You must use the file input box if not entering the full path.")
      return textInput  
    
    def clean_fileFieldName(self):
      fileInput = self.cleaned_data.get('fileFieldName')
      textInput = self.cleaned_data.get('textBoxFieldName')
      if not fileInput and not textInput:
        raise ValidationError("You must provide the file input if not entering the full path")
      return fileInput

    på den skabelon,

    {% if form.errors %}
      {{form.non_field_errors}}
      {% if not form.non_field_errors %}
        {{form.errors}}
      {% endif %}
    {% endif %}

    OriginalForfatteren grantk

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *