2011-02-07 18 views
0

私は3つのファイルフィールドを持つモデルを持ち、.saveが呼び出されたときにモデルを操作します。問題は、オブジェクトのFileFieldトリガー.saveを保存することです。一度に複数のFileFieldを保存するにはどうすればよいですか?2つのファイルfileldを一度にモデルに保存する

alt_audioと試料中に保存された音声は(mp3)をアップロードした場合、それはoggの(またはその逆)にmp3から変換されます
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) 

、:

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

にあなたはsaveを呼び出すオプションのパラメータがあるとき、それは、何をトリガしません。デフォルトでは、コミットがトリガされますが、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') 
関連する問題