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 |
+-------+ +------------+