【发布时间】:2023-04-06 05:02:01
【问题描述】:
在 Django 中没有一对多关系,只有多对一。如果在子表上定义外键很奇怪,我们应该去多对多吗?
例如:
这本书有很多页。如果我们在 Page 模型上定义外键,那么页面就有一本书,这不是一件直观的事情(或说)。
选项 1:
class Book(models.Model):
name = models.CharField(max_length=100)
date_published = models.DateTimeField(default=timezone.now)
class Page(models.Model):
page_number = models.IntegerField()
page_text = RichTextField()
book = models.ForeignKey(Book, on_delete=models.CASCADE)
选项 2
class Book(models.Model):
name = models.CharField(max_length=100)
date_published = models.DateTimeField(default=timezone.now)
pages = models.ManytoMany(Page)
class Page(models.Model):
page_number = models.IntegerField()
page_text = RichTextField()
在选项 2 中,我可以通过 book.pages 访问本书的页面。
在选项 1 中,我不知道如何访问这些页面,也许 book.pages_set.objects.all() 并不漂亮。
我问了一个程序员同事,他说只使用多对多。我了解每种方法的含义,并且我也了解两者之间在数据库中发生的情况的区别。我的问题是什么是更好/标准的方法。
【问题讨论】:
标签: python django django-models