Django 将附加值与manytomanyfield关联

Django 将附加值与manytomanyfield关联,django,django-models,Django,Django Models,我有两本书和我最喜欢的书 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') 在这里,用户有自

我有两本书和我最喜欢的书

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')

在这里,用户有自己喜爱的书籍集。我想将一个附加变量关联到所选的每本喜爱的书,但如何做到这一点?

您可以通过模型定义一个
:一个用于编写多对多关系的模型。但是你的造型总的来说有点奇怪。您为什么在这里使用
OneToOneField
来连接
用户
收藏夹
不是单个收藏夹(因此,单个用户喜欢一本书:

现在,
Favorite
被看作是一个事实,
用户
喜欢一本
。而不是一对一的模型实例附加到一个
用户
上,该用户将包含所有的收藏夹


更多信息,请参见。

通过指定<代码>到
模型…但您的建模一开始就非常奇怪,您对用户使用<代码>OneToOne?另一种方式是什么?我对django不熟悉。我的实现方式是用户可以选择多个favorites@Ahmed:这是完全可能的,因为每个用户都有自己的最爱,是该用户的单个
收藏夹
实例。使用名为
收藏夹
的模型在中存储*多个
收藏夹
是相当奇怪的。在您的实现中,
收藏夹
没有太多附加值,因为您的
收藏夹
基本上充当
用户
的代理对象y使用这种只有一个
OneToOne
字段的浅层模型是不好的,因为(a)它们创建的表只会添加数据重复(这已经是一种反模式),(b)这会使查询更加复杂,以及(c)效率较低。
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 |
+-------+       +------------+