Django сериалайзер для связующей таблицы

Подскажите, как создать сериалайзер, что бы можно было создавать сразу в таблицу BookPrice, что бы они появлялись в таблицах PriceStore и Book. Или как реализовать создание записи в таблице BookPrice, когда создаётся запись в PriceStore таблице.

models.py

class PriceStore(models.Model):
    prices = models.ForeignKey(Price, blank=False, null=False, on_delete=models.CASCADE)
    stores = models.ForeignKey(Store, blank=False, null=False, on_delete=models.CASCADE)
    

class Book(models.Model):
    book_number = models.IntegerField(blank=False, null=False)
    name = models.CharField(max_length=255, blank=False, null=False)
    language = models.CharField(max_length=255, blank=False, null=False)
    short_desc = models.CharField(max_length=255, blank=False, null=False)
    old_version = models.CharField(max_length=255, blank=True, null=True)


class BookPrice(models.Model):
    books = models.ForeignKey(Books, blank=False, null=False, on_delete=models.CASCADE)
    prices = models.ForeignKey(Price, blank=False, null=False, on_delete=models.CASCADE)

serializer.py

class BookPriceSerializer(serializers.ModelSerializer):

    class Meta:
        model = BookPrice
        fields = [
             'book',
             'pricestore',
        ]

view.py

class BookPriceView(generics.CreateAPIView):
    serializer_class = BookPriceSerializer

Но в сериалайзере можно создать только по уже существующим данным.

Я пытался сделать сериалайзер с ссылками на поля таблици.

serializer.py

class BookPriceSerializer(serializers.ModelSerializer):

    class Meta:
        model = BookPrice
        fields = [
             'book__number',
             'book__name',
             'book__language',
             'book__short_desc',
             'book__old_version',
             'pricestore__prices',
             'pricestore__stores',
        ]

Ответы (1 шт):

Автор решения: Andrew Holovko

По всей видимости - ваша таблица BookPrice . Будет хранить только id из двух таблиц.

class BookPrice(models.Model):
    books = models.ForeignKey(Books, blank=False, null=False, on_delete=models.CASCADE)
    prices = models.ForeignKey(Price, blank=False, null=False, on_delete=models.CASCADE)

В таком случае используйте fields = '__all__'.

На вашем месте, я бы использовал связи many_to_many используя её - в базе будет создана аналогичная вашей таблица ассоциаций. Но доступ к объектам будет намного проще. https://docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many/

Сериализатор в данном случае также будет проще. Меньше кода. Полный пример вы можете найти тут: https://stackoverflow.com/questions/33182092/django-rest-framework-serializing-many-to-many-field

→ Ссылка