【发布时间】:2017-05-11 19:22:08
【问题描述】:
我正在创建一个小型 django 应用程序,用户可以在其中查看他或她的个人资料上的喜欢和不喜欢的数量以及喜欢或不喜欢该个人资料的人。
我的 django 模型是:
class ProfileView(TimeStamp):
PROFILE_RESPONSE = (
(0, 'Like'),
(1, 'dislike'),
)
user_from = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
user_to = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='views',
)
response = models.IntegerField(choices=PROFILE_RESPONSE)
在此表中,我将喜欢/不喜欢个人资料的人存储在 user_from 中,以及他喜欢/不喜欢的人在 user_to 中。回复user_from 喜欢或不喜欢user_to(0 表示喜欢,1 表示不喜欢)
但是这种解决方案不可扩展,并且像列出所有喜欢或不喜欢特定个人资料的用户这样的查询效率很低。那么,在关系数据库中还有比这更好的选择吗?注意,我正在使用 postgresql。
【问题讨论】:
-
你知道聚合吗?这可能在这里有用。 docs.djangoproject.com/en/1.10/topics/db/aggregation 否则,您可以在配置文件模型中添加四个新 (int) 字段来计算自己和配置文件的好恶。
-
感谢聚合链接,但添加四个字段将无济于事,因为我还必须存储喜欢特定喜欢的用户。
-
你能写出实际的代码吗?我无法理解您所说的“user_from | user_to | response(0,1)”是什么意思。
-
我想说的是,假设有一个用户 A,用户 B 和 C 喜欢并且 D 不喜欢 A 的个人资料。现在很容易存储 A 的喜欢和不喜欢计数,但我还想存储 B、C 和 D 的他们喜欢或不喜欢 A 的个人资料的信息,以便用户 A 可以看到谁喜欢他的个人资料。
标签: django database postgresql