Сохранить два файла filelds в модели одновременно - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть модель с 3 файловыми полями, и я манипулирую ими при вызове .save.Проблема в том, что сохранение любого FileField вызывает .save объекта.Что я могу сделать, чтобы сохранить несколько FileFields одновременно?

class Record(Model):
    name = CharField(max_length=30)
    audio = FileField(upload_to=settings.AUDIO_ROOT)
    alt_audio = FileField(upload_to=settings.AUDIO_ROOT, null=True)
    sample = FileField(upload_to=settings.AUDIO_ROOT, null=True)

def save(self, *args, **kwargs):
    convert_files(self)
    super(Record, self).save(*args, **kwargs)

Когда аудио загружено (mp3), оно преобразуется из mp3 в ogg (или наоборот), которое сохраняется в alt_audio и sample:

def convert_files(record):
    ...
    record.alt_audio.save(os.path.basename(convert_to), File(open(convert_to)))
    record.sample.save(os.path.basename(sample_name), File(open(sample_name, 'r')))

Проблема в том, что alt_audio.save запускает обратно record.save.Я должен был добавить проверки каждого файлового поля, если оно не пустое.Я также хочу отложить действие, передав его серверу сельдерея позже.Есть ли способ не запускать .save несколько раз?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011

При вызове сохранения есть необязательный параметр. По умолчанию фиксация запускается, но если вы сделаете record.audio.save ("audiofile.mp3", File (open (path_to_audio)), False), метод сохранения не будет активирован.

1 голос
/ 07 февраля 2011

Используйте .update, он ничего не будет запускать, только в базе данных

Record.objects.filter(pk=record.pk).update(field='new_value', field2='newvalue')
...