web-dev-qa-db-ja.com

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個のタグが含まれることに注意してください。

お知らせ下さい。

18
azio

タグクラウドを作成するだけの場合は、そのデータモデルで十分です。私は1つの変更を加えます:

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

これにより、写真ビューの逆引き参照が読みやすくなり、覚えやすくなります。

ただし、タグの他の使用例を検討します。タグクラウドを使用したいのはタグクラウドだけですか?関係に含める必要のあるメタデータはありますか?

数百万の行を持つことを計画している場合、キャッシュはデータモデルと同じくらい重要になります。

また、車輪の再発明を避けるために、他の誰かがあなたの目的に役立つライブラリを構築していないかどうかを確認してください: http://www.djangopackages.com/grids/g/tagging/

編集:スペル

24
Arion

私は多くの方法を試しましたが、Django-taggitというこのパッケージを使用することで、苦労が少なく、最も簡単に実行できることがわかりました。

Django-taggitドキュメントを読む

0
Ahmed Wagdi