Frage

Also, ich arbeite die Antwort auf meine vorherige Frage an der Umsetzung .

Hier ist mein Modell:

class Talk(models.Model):
  title        = models.CharField(max_length=200)
  mp3          = models.FileField(upload_to = u'talks/', max_length=200)

Hier ist meine Form:

class TalkForm(forms.ModelForm):
  def clean(self):
    super(TalkForm, self).clean()
    cleaned_data = self.cleaned_data

    if u'mp3' in self.files:
      from mutagen.mp3 import MP3
      if hasattr(self.files['mp3'], 'temporary_file_path'):
        audio = MP3(self.files['mp3'].temporary_file_path())
      else:
        # What goes here?
        audio = None # setting to None for now
      ...
    return cleaned_data

  class Meta:
    model = Talk

Mutagen braucht dateiähnliche Objekte oder Dateinamen auf der Festplatte (I < em> denkt ) - der erste Fall (in dem die hochgeladene Datei größer als die Größe der Datei im Speicher behandelt ist) funktioniert gut, aber ich weiß nicht, wie InMemoryUploadedFile zu handhaben, dass ich sonst bekommen. Ich habe versucht:

# TypeError (coercing to Unicode: need string or buffer, InMemoryUploadedFile found)
audio = MP3(self.files['mp3'])

# TypeError (coercing to Unicode: need string or buffer, cStringIO.StringO found)
audio = MP3(self.files['mp3'].file)

# Hangs seemingly indefinitely on my test file (~800KB)
audio = MP3(self.files['mp3'].file.read())

Gibt es etwas falsch mit Mutagen, oder bin ich es falsch?

Nach Rebus' Antwort

Ändern der FILE_UPLOAD_HANDLERS Einstellung on the fly in meiner ModelAdmin Klasse wie folgt:

def add_view(self, request, form_url='', extra_context=None):
  request.upload_handlers = [TemporaryFileUploadHandler()]
  return super(TalkAdmin, self).add_view(request, form_url, extra_context)

Ruft mir die folgende Störung 500, wenn ich einreichen getroffen:

  

Sie können die Upload-Handler nicht gesetzt, nachdem der Upload verarbeitet wurde.

obwohl ich mache es so früh wie ich nur kann!

Auch ich bin nicht sicher, habe ich eine save Methode für das Objekt bekam ich bin immer wieder (ich habe in dir(self.files['mp3'].file) und dir(self.files['mp3']) sah).

War es hilfreich?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top