2012-11-10 10 views
13

次はイメージのためのシステムをタグ付けし、タグクラウドをレンダリングすることができることを作成するための正しい方法である場合、私は疑問に思って:私のデータベーステーブルには数百万行が含まれますDjangoのタグモデル設計

from django.db import models 

class Tag(models.Model): 
    word  = models.CharField(max_length=35) 
    slug  = models.CharField(max_length=250) 
    created_at = models.DateTimeField(auto_now_add=False) 

    def __unicode__(self): 
     return self.word 

class Photo(models.Model): 
    slug    = models.CharField(max_length=250) 
    filename   = models.CharField(max_length=200) 
    extension   = models.CharField(max_length=4) 
    size    = models.IntegerField() 
    ... 
    tags    = models.ManyToManyField(Tag) 

    def __unicode__(self): 
     return self.slug 

注意をし、各画像は4〜8個のタグを有する。

お知らせください。

+0

が、私はこれはかなりしばらく前だった知っているスペルが、希望:http://www.djangopackages.com/grids/g/tagging/

編集

また、車輪の再発明を避けるために、他の誰かがあなたの目的に役立つライブラリを構築しているかどうかを確認タグにスラッグフィールドを置く理由を説明する気がしますか?つまり、目的は何か。本当に好奇心。 – Nifled

答えて

18

タグクラウドを作成するだけであれば、そのデータモデルで十分であるはずです。

tags = models.ManyToManyField(Tag,related_name='photos') 

これは、フォトビューを逆読みして読みやすく、覚えやすいようにします。

しかし、私はあなたのタグの他の使用例を検討します。タグクラウドは、タグ付けを使用する唯一のものですか?関係に含めるべきメタデータはありますか?

もし何百万もの行を予定しているのであれば、キャッシュはデータモデルほど重要になるでしょう。あなたを

+0

+1は、既存のdjangoパッケージを指します。 –

+0

はい私はこれが好きです:http://django-taggit.readthedocs.io/en/stable/getting_started.html – Tsangares

関連する問題