24

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

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 个标签。

请指教。

4

2 回答 2

29

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

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

这将使您的照片视图中的反向查找更易于阅读和记忆。

但是,我会考虑您的标签的其他用例。标签云是您唯一想使用标签的东西吗?该关系是否应包含任何元数据?

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

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

于 2012-11-10T01:14:24.193 回答
3

自己处理标签可能是一项艰巨的工作。您可以轻松使用 django 库。用 pip 安装

pip install django-taggit
于 2020-05-20T11:15:43.293 回答