sql - 需要帮助构建具有多对多关系的 Django 数据库
问题描述
我正在为一个应用程序设置一个 Django 模型/数据库,该应用程序旨在跟踪社交媒体上keyword
分配的 a的使用情况。需要为. user
_ _ _message
date
url
platform
keyword
这部分很容易用三个模型完成——一个User
包含用户名、名字、姓氏、电子邮件和密码的Keyword
模型,一个包含用户名作为外键的模型,以及用户关键字列表。Context
然后将通过关键字链接第三个模型,并包含关键字使用的上下文信息。
所以关系看起来像:
User Keywords Context
username---->username
keyword---------->Keyword
kw_createdate message
post_date
url
platform
但是,我还想RelatedTerms
为每个关键字输入一个数字,例如,如果您正在跟踪关键字“python”,您可以添加相关术语“java”、“ruby”和“c#”。对于相关术语,我真正需要的是计算它们在给定时间范围内使用的次数,但我并不反对保存它们的上下文信息,因为它可能在未来有用。
我想不通的是我应该如何构建模型来存储相关术语。我应该将它们存储在Keywords
模型中并有一个主要/相关标志,然后在上下文模型中也有这些词吗?
此外,关键字和上下文模型中使用的关键字之间的关系类型是什么?两个用户可以有相同的关键字,但他们将在不同的时间范围内被跟踪。
解决方案
另一个型号怎么样RelatedKeywords
?
假设相关关键字是特定于用户的,这看起来像:
class User(models.Model):
...
class UserKeyword(models.Model):
user = models.ForeignKey(User, related_name='keywords')
keyword = models.CharField(...)
class UserKewordContext(models.Model):
user_keyword = models.OneToOneField(UserKeyword, related_name='context') # Assumes that each UserKeyword can only have one context; change to ForeignKey if that is not the case
keyword = models.CharField(...)
...
class UserRelatedKeyword(models.Model):
user_keyword = models.ForeignKey(UserKeyword, related_name='related_keywords')
related_keyword = models.CharField(...)
如果您有一家全球Keyword
商店;将所有定义为CharField
a的关键字存储字段替换为ForeignKey
:
class Keyword(models.Model):
name = models.CharField(...)
class UserKeyword(models.Model):
user = models.ForeignKey(User, related_name='keywords')
keyword = models.ForeignKey(Keyword)
class UserKewordContext(models.Model):
user_keyword = models.OneToOneField(UserKeyword, related_name='context') # Assumes that each UserKeyword can only have one context; change to ForeignKey if that is not the case
keyword = models.ForeignKey(Keyword)
...
class UserRelatedKeyword(models.Model):
user_keyword = models.ForeignKey(UserKeyword, related_name='related_keywords')
keyword = models.ForeignKey(Keyword)
然后,您可以按如下方式访问以下内容:
- 给定用户的所有关键字:
user.keywords.all()
- 每个的上下文
UserKeyword
:user_keyword.context
- 每个的所有相关关键字
UserKeyword
:user_keyword.related_keywords.all()
推荐阅读
- ios - NSTextAttachment 未显示
- oracle-apex-5 - 为什么模态对话框中的内容被截断?
- ios - 使用 xamarin 在 ios 中显示联系人地址
- javascript - 随机颜色到 SVG 矩形
- python - 将新项目添加到基于其他项目值控制的字典列表
- java - 在java中显示输入字符串有困难
- java - 我使用 ReentrantReadWriteLock 有什么问题?
- javascript - 传入事件Target ID JS时无法访问cellIndex
- docker-compose - Hyperledger - MSP 错误:提供的身份无效:x509:证书由未知机构签名
- android - 从嵌套的回收器视图中获取数据