什么时候在Django中使用每个模型关系



我已经阅读了Django文档,并在网站上查看了几个小时的其他答案,但我仍然无法理解。我知道这不是Django特有的,但我使用的示例将来自Django项目。

我的问题归结为什么时候适合使用每种:

  • 多对多关系
  • 多对一关系
  • 一对一关系

一对一,对我来说或多或少是有意义的。

现在给另外两个。虽然我孤立地理解它们之间的区别,但当涉及到在项目中实际使用它们时,我会感到困惑。这里有一个例子:

class User(AbstractUser):
pass
class Listing(models.Model):
title = models.CharField(max_length=64)
description = models.TextField()
class Watchlist(models.Model):
user = models.ForeignKey(User, related_name='watchlist', on_delete=models.CASCADE)
item = models.ManyToManyField(Listing)
class Comment(models.Model):
user = models.ForeignKey(User, related_name='comments', on_delete=models.SET_NULL)
comment = models.TextField()

这是否是Many-to-one(ForeignKey(Many-to-Many的正确用法

  1. Watchlist.item应该是ForeignKey吗?还是M2M是正确的
  2. 将"监视列表"作为User类的一部分不是很简单吗?(给他们一个空列表,用列表ID填充(
  3. 如果每个观察列表都属于一个用户,并且一个用户只能有一个列表,为什么Watchlist.user不是一对一关系

为我的愚蠢道歉,我就是无法理解!

谢谢

编辑:上下文中,这些模型来自我正在进行的一个"学习"项目,该项目旨在成为一个拍卖网站,类似于eBay。观察名单有点像"愿望"清单。。。供用户观看项目,而不是供网站观看用户!

为了简单地解释,这些django模型或对象表示数据库中的表,字段就像其中的列。因此,对于一对一关系,一个表中只能有一行与另一个表的一行相关。例如,用户表(由一行表示(中的一个用户只能与配置文件表中的一行相关。但是你的用户可以有很多评论,所以这将是一对多/foreignkey关系(如果你在fk上设置unique=true,那么在实践中它的作用是1:1(。如果用户可以合作撰写评论,或者例如在stackoverflow上,用户可以编辑其他用户的评论,那么这将是一种多对多的关系。

数据库设计可能很复杂,尤其是使用ORM时,没有SQL的基本知识以及它在其中的工作原理。一般来说,即使是一个简单的应用程序,也需要一些规划。

最新更新