Django标签模型设计

Posted

技术标签:

【中文标题】Django标签模型设计【英文标题】:Django Tag model design 【发布时间】:2012-10-30 08:47:41 【问题描述】:

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

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

请指教。

【问题讨论】:

我知道这是很久以前的事了,但是您介意解释一下为什么要在 Tag 中放置一个 slug 字段吗?我的意思是,目的是什么。真的很好奇。 我在数据库中保存存储空间的方法是使用逗号分隔值,例如 mac、windows、linux,因为照片本身就有标签,不会将它们用于进一步的目的。 【参考方案1】:

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

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

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

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

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

另外,为了避免重新发明***,看看有没有其他人建立了一个可以满足你的目的的库:http://www.djangopackages.com/grids/g/tagging/

【讨论】:

是的,我喜欢这个:django-taggit.readthedocs.io/en/stable/getting_started.html【参考方案2】:

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

pip install django-taggit

【讨论】:

以上是关于Django标签模型设计的主要内容,如果未能解决你的问题,请参考以下文章

[Django之框架设计模型(MTV与MVC)Ajax]

Django 环境下常用的模型设计

Django 模型:用户和关注者的数据库设计

django项目一:基于django2.2可重用登录与注册模块-数据模型设计

Django中的模型设计

Django:Django的设计模式