2011-02-07 38 views
0

我有一個包含3個文件字段的模型,並在調用.save時對其進行處理。問題在於保存對象的任何FileField觸發器.save。我能做些什麼來一次保存多個FileField?一次在模型中保存兩個文件filelds

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多次?

回答

3

還有,當你調用保存的可選參數。默認情況下,會觸發提交,但如果您執行record.audio.save(「audiofile.mp3」,File(open(path_to_audio)),False),則不會觸發save方法。

1

使用.update,也不會引發任何東西,當只對數據庫

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