Django Tag模型设计

azi*_*zio 18 python tags django scalability

我想知道以下是否是为图像创建标记系统并能够呈现标记云的正确方法:

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
Run Code Online (Sandbox Code Playgroud)

请注意,我的数据库表将包含数百万行,每个图像将包含4-8个标记.

请指教.

Ari*_*ion 24

如果您只想创建一个标签云,那么该数据模型应该足够了.我会做一个修改:

tags = models.ManyToManyField(Tag,related_name='photos')
Run Code Online (Sandbox Code Playgroud)

这将使您在照片视图中的反向查找更清晰,更易于阅读和更容易记忆.

但是,我会考虑您的标签的其他用例.标签云是您唯一要使用标记的东西吗?是否存在关系应包含的元数据?

如果您计划拥有数百万行,那么缓存将与数据模型一样重要.

此外,为了避免重新发明轮子,看看是否有其他人已经建立了一个满足您目的的库:http://www.djangopackages.com/grids/g/tagging/

编辑:拼写