我有2本书和最喜欢的书
class Book(models.Model):
title = models.CharField(max_length=200)
class Favorite(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
favorites = models.ManyToManyField(Book, related_name='favorited_by')
用户在这里拥有自己的收藏夹集。我想为每个选中的喜欢的书关联一个额外的变量,但是该怎么做呢?
答案 0 :(得分:1)
您可以定义through
模型:该模型用于编写多对多关系。但是您的建模通常有点奇怪。为什么在这里使用OneToOneField
到User
?不是Favorite
的单人的最爱(因此单人用户喜欢单人的书这一事实:
from django.conf import settings
class Book(models.Model):
title = models.CharField(max_length=200)
users = models.ManyToManyField(settings.AUTH_USER_MODEL, through='Favorite')
class Favorite(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
additional = models.IntegerField()
因此,我们将其建模为三个模型:
+-------+ 1 M +------------+ N 1 +------+
| Book |-------| Favorite |--------| User |
+-------+ +------------+ +------+
| title | | additional |
+-------+ +------------+
现在Favorite
被视为 a User
喜欢 a Book
的事实。不是作为附加到User
的一对一模型实例,该实例将包含所有收藏夹。
有关更多信息,see the documentation on the through
parameter [Django-doc]。