一次在模型中保存两个文件字段

时间:2011-02-07 10:12:41

标签: python django django-models django-orm

我有一个包含3个文件字段的模型,并在调用.save时对其进行操作。问题是保存任何FileField触发对象的.save。如何一次保存多个FileField?

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并示例:

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 个答案:

答案 0 :(得分:3)

调用save时有一个可选参数。默认情况下,会触发提交,但如果执行record.audio.save(“audiofile.mp3”,File(open(path_to_audio)),False),则不会触发save方法。

答案 1 :(得分:1)

使用.update,只在数据库上

时才会触发任何内容
Record.objects.filter(pk=record.pk).update(field='new_value', field2='newvalue')