2011-01-03 5 views
0

信号を使って、モデルがカテゴリに属する​​かどうかを確認します。そうであれば、オプションのImageFieldを特定のURLに変更したいと思います。Django:オプションのImageFieldのURLを変更する

これはどのように達成できますか?以下のコードは動作しませんが、オプションのフィールドであるため「属性を設定できません」というエラーが表示され、保存したときに空白になりました。ここで

は私のサンプルモデル

class Foo(models.Model): 
    category = models.IntegerField(max_length=1) 
    poster = models.ImageField(u"Poster", blank=True) 

と私のポストが信号を保存している:

def post_poster(instance, **kwargs): 
     if instance.category == 1 #a specific category 
      instance.poster.url = u'/media/special_image_for_1.png' 
      instance.save() 
    except MovieCat.DoesNotExist: 
     pass 
+0

これは、あなたが知っている、適切なPythonの構文ではありません。 – gruszczy

答えて

0

あなたが(そのコードに動作しますか?)あなたが持っているものの問題言っていないので、そこにあなたのコードには2つの問題があります。まず、ポストセーブ信号(無限ループ、誰ですか?)に保存したくないでしょう。 第2に、インデントの問題があります(ifの後ろにインデントする必要があります)。

おそらくこれを行う方法はModel.clean()です。

は、このようなあなたのモデルにcleanメソッドを定義します。

def clean(self): 
    if instance.category == 1 #a specific category 
    instance.poster.url = u'/media/special_image_for_1.png' 
+0

私のラッシュを言い訳、今私は問題の部分を編集し、インデントを正しく設定します。 – Hellnar

+0

@Hellnar - あなたがする必要があるもので更新されました。 –

+0

ありがとう、Dominic! – Hellnar

関連する問題