django-forms – Edición de un modelo de Django con un campo de archivos sin volver a cargar el archivo

A continuación se muestra una versión simplificada del código django en mi proyecto; les permite a los usuarios subir un archivo y darle un título. Esta característica funciona perfectamente. Sin embargo, cuando el usuario vuelve a editar el formulario más tarde, el archivo y el título se vuelven a mostrar, pero cuando el usuario va a enviar el archivo, se vacía. El campo de archivo del formulario reabierto para editar se ve así:

Currently: media_location/uploadedfile.mp3

Change: [Choose File] No file Chosen

Y después de enviarlo, es:

  • This Filed is required

[Choose File] No file Chosen

¿Cómo lo consigo para que el usuario no tenga que volver a cargar el archivo? No me importa si el campo se hace solo una vez que se realiza el envío, o si sigue siendo editable. El proyecto finalizado no es para un cliente y solo estará disponible para un pequeño grupo de usuarios de confianza, pero me gustaría seguir las mejores prácticas si es posible. Gracias por cualquier ayuda.

Código Django:

modelos.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

vistas.py

def addrecordings(request,recordingfile):
    #if there is a recordingfile in the url, the user is editing...
    if recordingfile:
        recording=Recording.objects.get(rec_title=recordingfile)
        recording_form = RecordingForm(instance=recording)
    #...Otherwise a new form is createing a new one
    else:
        recording_form = RecordingForm(request.POST, request.FILES)

    #When the form is submitted, do the following:
    if request.method == 'POST': 
        #check if its valid
        if recording_form.is_valid():
            recording_form.save() 
            #if sucessfully submitted, redirect
            return redirect('/recordings/')
    return render_to_response('addrecordings.html',{'recording_form':recording_form},context_instance=RequestContext(request))
Mejor respuesta
Yo tuve el mismo problema.

Puede anular la función de limpieza predeterminada de un modelo. Esto valida todos los formularios, el usuario puede cambiar el archivo de imagen en la edición y se garantiza que el archivo no está vacío.

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')

Por favor indique la dirección original:django-forms – Edición de un modelo de Django con un campo de archivos sin volver a cargar el archivo - Código de registro