首页 > 解决方案 > 无法在指定中间模型的 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)

标签: djangodjango-rest-frameworkmany-to-many

解决方案


你根本不需要做任何事情。通过创建 BookUserRelationship 实例,您已经在 for 循环中设置了相关数据。那就是多对多的关系;你应该删除这instance.send_to.set(emails)条线。


推荐阅读