2011-10-18 20 views
2

私は完全に完全にプログラミングに新しいので、おそらく愚かな質問ではありませんが、私は過去2〜3日間この頭を打ちました。動的な属性を持つDjangoモデル

写真とサムネイルの2つのモデルがあります。私は各写真のサムネイルリンクを取得するための簡単でダイナミックな方法を考え出しています。私はこれを行う関数(get_thumbs)を思いついたが、モデルが呼び出されたときに自動的に実行したい(基本的に、モデルが利用可能になるとすぐにPhoto.get_%s_url%thumb.nameを取得する) 。

以下は私のmodels.pyです。適切な方向への助けや振る舞い(たとえそれがちょうど「google blah」であっても)は非常に高く評価されます。ありがとう。

class Photo(models.Model): 
    name = models.CharField(max_length=100) 
    original_image = models.ImageField(upload_to='photos') 
    caption = models.TextField(null=True, blank=True) 
    title_slug = models.SlugField(null=True, blank=True, unique=True) 
    rootfilename = models.CharField(max_length=50, editable=False, blank=True) 
    num_views = models.PositiveIntegerField(editable=False, default=0) 

    def __unicode__(self): 
     return self.name 

    thumbnails = Thumbnail.objects.all() 

    def create_thumbs(self): 
     for thumbnail in self.thumbnails: 
      fname = (settings.MEDIA_ROOT + self.rootfilename + '_' + thumbnail.name + '.jpg') 
      if exists(fname): 
       None 
      else: 
       t_img = Image.open(self.original_image.path) 
       t_fit = ImageOps.fit(t_img, (thumbnail.height,thumbnail.width), Image.ANTIALIAS, 0, (0.5,0.5)) 
       t_fit.save(fname,"JPEG") 

    def save(self, *args, **kwargs): 
     self.rootfilename = (self.original_image.name).strip('photos/.jpg') 
     super(Photo, self).save(*args, **kwargs) 
     self.create_thumbs() 

    def get_thumbs(self): 
     for thumb in self.thumbnails: 
      setattr(self, ('get_'+thumb.name+'_url'), ('thumbs/'+self.rootfilename+'_'+thumb.name+'.jpg')) 
+1

**さまざまなソリューションの長所と短所を考慮したこの回答をご覧ください。** http://stackoverflow.com/a/7934577/497056 –

答えて

1

あなたが救う方法で行ったように__init__メソッドをオーバーライドして、あなたはスーパー(写真、自己)を呼び出す前にself.get_thumbs()を呼びたいです。 のinit(* argsを、** kwargsから)

代わりに、あなたは、ソートの二つの組み合わせのようなものです。この問題のsorl.thumbnail、ジャンゴ・imagekit、または簡単なサムネイル(に他の人々のソリューションで見ることができます)

+0

BAH!私はとても近かった!ありがとう、Issac、それはまさに私が探していたものでした。私は他の写真関連のプロジェクトを調べることさえ考えなかった。私は将来のスピードバンプのためにそれを念頭に置いておきます。再度、感謝します!! – Jared

関連する問題