Поля типа ManyToManyField не сохраняют данные при отправке запроса, DRF

В основном я делаю что-то вроде 'Archive of Our Own' и у меня не сохраняется работа или сохраняется, но данные полей ManyToMany не сохраняются

views.py

if request.method == 'POST':  
    serializer = FanficSerializerCreate(data=request.data)

    if serializer.is_valid():
      serializer.save()
      return Response({'fanfic': serializer.data}, status = status.HTTP_201_CREATED)

models.py

class Fanfic(models.Model):
...
  user = models.ForeignKey(User, on_delete=models.CASCADE)
  title = models.CharField(max_length=200)
  fandoms = models.ManyToManyField(Fandom)
  pairings = models.ManyToManyField(Pairing)
  characters = models.ManyToManyField(Hero)
  tags = models.ManyToManyField(Tag)
....

serializer.py

class FanficSerializerCreate(ModelSerializer):

  fandoms = FandomSerializer(many=True, read_only=True)
  pairings = PairingSerializer(many=True, read_only=True)
  characters = HeroSerializer(many=True, read_only=True)
  tags = TagSerializer(many=True, read_only=True)

  class Meta:
    model = Fanfic
    fields = ['id', 'user', 'title', 'fandoms', 'pairings', 'characters', 'translate', 'categories', 'end', 'relationships', 'tags', 'description', 'note', 'i_write_for', 'created', 'updated']

Я думаю, что проблема в сериализаторе для другой секции, например, добавление символа с тем же кодом представления, но без полей manytomanyfield в моделях работает нормально

когда я пишу это в serializers.py

fandoms = FandomSerializer(many=True, read_only=True)
  pairings = PairingSerializer(many=True, read_only=True)
  characters = HeroSerializer(many=True, read_only=True)
  tags = TagSerializer(many=True, read_only=True)

отображает

{
   "fanfic": {
      "id": 4,
      "user": 3,
      "title": "Claimed",
      "fandoms": [],
      "pairings": [],
      "characters": [],
      "translate": "NO",
      "categories": "M",
      "end": "ENDED",
      "relationships": "M/M",
      "tags": [],
      "description": "",
      "i_write_for": "...",
      "created": "2022-11-14T13:46:44.425693Z",
      "updated": "2022-11-14T13:46:44.425693Z"
   }
}

id просто не добавлен в поля

когда я пишу это в serializers.py

fandoms = FandomSerializer(many=True)
  pairings = PairingSerializer(many=True)
  characters = HeroSerializer(many=True)
  tags = TagSerializer(many=True)

в почтальоне

{
   "message": {
      "fandoms": [
         "This field is required."
      ],
      "pairings": [
         "This field is required."
      ],
      "characters": [
         "This field is required."
      ],
      "tags": [
         "This field is required."
      ]
   }
}

Вы можете сделать поля вложенных сериализаторов необязательными, если required=False обратитесь к этому полю:

class FanficSerializerCreate(ModelSerializer):

  fandoms = FandomSerializer(many=True, required=False)
  ...

  class Meta:
    model = Fanfic
    ...

Кроме того, вы можете иметь их для различных полей в классе Meta:

class FanficSerializerCreate(ModelSerializer):

  fandoms = FandomSerializer(many=True)
  ...

  class Meta:
    model = Fanfic
    extra_kwargs = {
        'fandoms': {'required': False}
        ...
    }
    ...

Ссылка: (https://www.django-rest-framework.org/api-guide/fields/#required)

Вернуться на верх