Невозможно установить значения для ManyToManyField, который указывает промежуточную модель - PullRequest
0 голосов
/ 19 ноября 2018

Как установить значения для ManyToManyField, в котором указана промежуточная модель?

В models.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)

1 Ответ

0 голосов
/ 19 ноября 2018

Тебе вообще ничего не нужно делать. Вы уже установили соответствующие данные в цикле for, создав экземпляры BookUserRelationship. Это является отношением многих ко многим; Вы должны просто удалить строку instance.send_to.set(emails).

...