python - Django Like 机制。数据库性能问题
问题描述
我有 CustomUser 模型和 Post 模型。我考虑在帖子中添加类似轻量级的机制。
我想到的是以这种方式定义一个 Like 模型以将模型相互连接:
class LikeFeedback(models.Model):
likingUser = models.ForeignKey(CustomUser)
post_liked = models.ManyToManyField(Post)
但是这种设计在数据库中产生了一个新的行,每个like。
另一种选择是以以下方式定义 CustomUser 和 Post 模型:
class Post(models.Model):
...
users_liked = models.ManyToManyField(CustomUser)
class CustomUser(models.Model):
...
posts_liked = models.ManyToManyField(Post)
我不确定这种方法是创建新行还是使用不同的索引机制,但它看起来更整洁。
就数据库性能而言,哪种方法最快?我是否需要在两个模型中定义 ManyToMany 连接以加快数据库进程?因为要在网页上一次显示 15 个帖子,并且每个帖子都需要检查访问者是否已经喜欢该注释。此外,每次点赞和取回都会在 DB 上执行写入操作。
解决方案
我不确定这种方法是创建新行还是使用不同的索引机制,但它看起来更整洁。
AManyToManyField
将创建一个名为联结表[wiki]的额外表,其中s 指向您定义 的模型,以及您使用.ForeignKey
ManyToManyField
ManyToManyField
此外,您只需要一个 ManyToManyField
,否则您将建立两个独立行动的关系。因此,您将其建模为:
from django.conf import settings
class Post(models.Model):
# ...
likes = models.ManyToManyField(
settings.AUTH_USER_MODEL,
related_name='liked_posts'
)
class CustomUser(models.Model):
# ...
# no ManyToManyField to Post
注意:通常使用
settings.AUTH_USER_MODEL
[Django-doc]引用用户模型比直接使用User
模型 [Django-doc]更好。有关更多信息,您可以查看文档的引用User
模型部分。
推荐阅读
- swift - 如何使用 Alamofire 等待 API 响应
- powershell - 重新启用导入模块 Psreadline 警告
- oracle-sqldeveloper - SetUP Oracle SQL Developer Credentials 我的新 Windows 安装
- r - what is the difference between weights="cell" and weights="proportional" in r package emmeans
- python-3.x - SQLAlchemy 模棱两可的文字:错误。使用“文本()”错误
- node.js - 无法在 Mac 上安装 parcel/parcel-bundler
- python - 找到算法的 BigO
- python - 尝试使用 for 循环创建字典对
- r - 将一排除以下面的一排(以 2 个为一组)
- ruby - 在 BDD 中使用 have_content 检查页面上的多个内容