2013-07-21 7 views
8

Unten ist eine vereinfachte Version des Django-Codes in meinem Projekt; Es ermöglicht Benutzern, eine Datei hochzuladen und ihr einen Titel zu geben. Diese Funktion funktioniert einwandfrei. Wenn der Benutzer das Formular später erneut bearbeitet, werden die Datei und der Titel jedoch erneut angezeigt, wenn der Benutzer die leere Datei übermittelt. Das Dateifeld der Bearbeitung wieder geöffnet Formulars wie folgt aussieht:Bearbeiten eines Django-Modells mit einem Dateifeld ohne erneutes Hochladen der Datei

Derzeit: media_location/uploadedfile.mp3

ändern: [Wählen Sie Datei] Keine Gewählte Datei

Und nachdem ich es einreichen, es ist:

  • Dies erforderte Abgelegt wird

[Wählen Sie Datei] Keine Datei ausgewählt

Wie kann ich es bekommen, so dass der Benutzer nicht um die Datei erneut hochladen? Es spielt für mich keine Rolle, ob das Feld nach der Übergabe gelesen wird oder ob es editierbar bleibt. Das fertige Projekt ist nicht für einen Client gedacht und wird nur einer kleinen Gruppe vertrauenswürdiger Benutzer zur Verfügung stehen. Ich möchte jedoch nach Möglichkeit den Best Practices folgen. Danke für jede Hilfe.

Django Code:

models.py

class Recording(models.Model): 
    rec_title=models.CharField(max_length=200,blank=True) 
    rec_file = models.FileField(upload_to='recordings') 

forms.py

from django import forms 
from songstorage.models import Recording 
class RecordingForm(forms.ModelForm): 
    rec_file=forms.FileField(label='Upload File') 
    rec_title=forms.CharField(label='Recording Title',required=False)  
    class Meta: 
     model=Recording 

views.py

+1

Haben ähnliche Problem, nur neugierig, ob Sie es schon ausgearbeitet haben? –

+1

Ich denke, Django sollte eine Funktion hinzufügen, um das zu lösen. –

Antwort

0

Ich habe das gleiche Problem hatte und konnte nicht herausfinden, wie noch in der Lage, etwas Sinnvolles, meine aktuelle Lösung zu suchen, ist eine andere Form zu verwenden, in Ihrem Szenario:

class RecordingUpdateForm(RecordingForm): 
    rec_file=forms.FileField(label='Upload File', required=False) 

Der einzige Unterschied ist, ich bin Verwenden Sie die updateView-klassenbasierte Ansicht, so dass Sie Ihre Ansichtsfunktion ändern müssen, um RecordingUpdateForm zum Aktualisieren zu verwenden.

0

Ich hatte das gleiche Problem.

Sie können die Standardbereinigungsfunktion eines Modells überschreiben. Dies validiert alle Formulare, der Benutzer kann die Bilddatei bei der Bearbeitung ändern, und die Datei ist garantiert nichtleer.

class MyModel(models.Model): 
    image = models.ImageField(blank=True) 
    def clean(self, *args, **kwargs): 
    super(MyModel, self).clean(*args, **kwargs) 
    if not self.image: 
     raise ValidationError('Please provide an image')