django - 无法在指定中间模型的 ManyToManyField 上设置值
问题描述
如何为指定中间模型的 ManyToManyField 设置值?
在模型.py
class BookUser(models.Model):
email = models.EmailField()
class Book(models.Model):
author_id= models.CharField(max_length=255)
send_to = models.ManyToManyField(BookUser, through='BookUserRelationship')
book_id = models.AutoField(primary_key=True)
file_size = models.CharField(null=True)
class BookUserRelationship(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
user = models.ForeignKey(BookUser, on_delete=models.CASCADE)
shared_date = models.DateTimeField(auto_now_add=True,null=True,blank=True)
试图在 serializers.py 中更新
class BookSerializer(serializers.ModelSerializer):
send_to = BookUserSerializer(many=True, read_only=True)
class Meta():
model = Book
fields = ('book_id', 'author_id','file_size','send_to')
class BookUserSerializer(serializers.ModelSerializer):
model = BookUser
fields = ('email')
在 views.py 中通过将 book_id 作为查询参数来列出书籍
class BookListView(generics.ListCreateAPIView):
serializer_class = serializers.BookSerializer
def get(self, request, *args, **kwargs):
user = self.request.user
book_id = self.request.query_params.get('book_id', None)
if book_id:
book = models.Book.objects.filter(book_id=book_id)
return Response(serializers.BookSerializer(book[0]).data)
解决方案
你根本不需要做任何事情。通过创建 BookUserRelationship 实例,您已经在 for 循环中设置了相关数据。那就是多对多的关系;你应该删除这instance.send_to.set(emails)
条线。
推荐阅读
- vba - 如何使用电子邮件中的主题行将附件分类到本地文件夹中?
- json - Spark 应用程序从 JSON 文件中读取动态 JSON 字段的值
- reactjs - CustomEvents 和 React.js 组件
- angular - 自定义验证器不会改变我的 ngClass
- java - 如何使用 System.out.println 找到 Java 类?
- java - 是什么导致码头空闲超时
- matlab - 使用 Scilab 绘制瀑布图
- java - 在使用 Java 流进行排序时将数字解析为字符串的简单方法?
- bluedata-3.7 - 如何在 Cloudera 5.x 上使用 pyspark 从 DataTap 读取数据?
- excel - for循环中的随机错误