2011-02-01 3 views
0

と、アップロードした後、ポストプロセスイメージpre_saveシグナルで:ジャンゴ - 私は画像を操作したい動的パラメータ私は、ユーザーにユーザー定義のパラメータ(幅、高さ、圧縮など)</p> <p>を使用して、アップロードした画像を、プロセスを投稿する機能を提供したい

class Media(models.Model): 
    id = models.AutoField(primary_key=True) 
    file = models.FileField(upload_to='uploads/%m-%Y/') 
    content_type = models.CharField(max_length=100, blank=True, null=True) 
    created = models.DateTimeField(auto_now_add=True, editable=False) 

class MediaForm(ModelForm): 
    class Meta: 
     model = Media 

    def save(self, force_insert=False, force_update=False, commit=True): 
     m = super(MediaForm, self).save(commit=False) 
     m.content_type = self.cleaned_data['file'].content_type 
     if commit: 
      m.save() 

def handle_uploaded_media(sender, instance, *args, **kwards): 
    # Use PIL to process media here (depending on type) 

models.signals.pre_save.connect(handle_uploaded_media, sender=Media) 

問題は、フォーム保存メソッドからpre_saveハンドラにパラメータを渡すことができないことです。それはきちんと整頓だと私は明らかにユーザー定義された値と保存の引数を置き換えることができますので

if request.method == 'POST': 
    form = MediaForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form.save({'width':500, 'height':500, 'compression':60}) 

:私が好きなことは、このような何かを行うことができるようにすることです。これは可能ですか?それを行うより良い方法はありますか?

答えて

1

このケースでは、handle_uploaded_media()をform.save()に配置するか、form.save()から呼び出すことで、ユーザー提供の値。

シグナルからhandle_uploaded_media()を呼び出すことで、実際にフォームから値の受け渡しを複雑にすること以外は、何も得られません。別の方法であれば、他のモデル/メソッドなどとでも共有できます。

My $ 0.02

関連する問題