2011-01-14 2 views
1

属性:ジャンゴ - のForeignKeyを通じてモデルに引数を渡すと、私はこのようなクラスの持っている

class Image (models.Model): 
    ... 
    sizes = ((90,90), (300,250)) 

    def resize_image(self): 
     for size in sizes: 
      ... 

と、このような別のクラス:

class SomeClassWithAnImage (models.Model): 
    ... 
    an_image = models.ForeignKey(Image) 

私はそれをどうしたいのですが何をクラスはこれです:

class SomeClassWithAnImage (models.Model): 
    ... 
    an_image = models.ForeignKey(Image, sizes=((90,90), (150, 120))) 

ここで私はImageクラスが自分自身をサイズ変更するために使用するサイズをarguとして指定できますクラスにハードコードされているよりむしろ。私はresize_imageを直接呼び出した場合にこれらを渡すことができることを認識していますが、オブジェクトがdbに永続化されたときにresize_imageメソッドが自動的に呼び出されるという考えがあります。

私がこのような外部キー宣言を介して引数を渡そうとすると、すぐにエラーが発生します。私がdjangoにハッキングを開始する前に、これを行う簡単な方法がありますか?

+0

エラーは何ですか? –

+0

Imageクラスを汎用的にしたいとしますか?つまり、一般的な画像を参照したいSomeClassWithAnImage以外のクラスはありますか? –

+0

@ジョンミー - それは正しいです。 Imageクラスを参照する他のクラスは、独自のサイトを持ちます。 – mjallday

答えて

0

あなたはそれを上に押しているかもしれません。 FKの議論を試み、適用することは珍しいことです。

あなたの細目に、従来のソリューションは、配信直前にサムネイル置換を行うこと(「SORL」のような)thumbnailerのを使用することです - つまり:テンプレートの例では:

{% thumbnail myobj.image 500 500 %} 

個人的に私はルーチンを追加したが、それらのサムネイルにアクセスしやすくするために私のクラスに追加しました。例:

def thumbnail(self): 
    path = # work out the path to the thumbnail 
    try: 
     #access the path where I expect the thumbnail file to be 
    except #failure: 
     # generate the thumbnail using the dimensions specified by the class 
    return #path to the thumbnail 
0

Djangoのオブジェクトの属性はすべてデータベースに格納されているため、モデルのサイズをフィールドにする必要があります。ランダムなプロパティを設定して、それらが永続することは期待できません。

タプルのリストのフィールドがないので、テキストフィールドを使用してクラウチするか、ListOfTuplesFieldを書き込むか、ListOfTuplesFieldから継承するImageSizesFieldを書き込む必要があります。データベースにシリアライズするためのコードを書く必要があります(テキストに変換するのが最も簡単な方法です)。また、解析するか、どこかにJSONFieldタイプがあるかもしれません。

これで、SomeClassWithAnImageモデルには、ImageへのForeignKeyとImageSizesFieldがあります。保存されると、オーバーライドされたsave()メソッドは、ImageSizesFieldの値を使用してImageのresizeメソッドを呼び出します。

別のSomeClassWithAnImageが同じImageを指しているとどうなりますか?

+0

データベースに画像のサイズを格納するのは、コードの匂いのように間違いなく(匂い?)聞こえます。確認していただきありがとうございます、私はもう少し掘削を行い、より良いものを見つけることができない場合は、受け入れられた答えを与えるでしょう。 – mjallday

関連する問題