Когда я добавляю сериализатор для поля ManyToMany, он отображает результаты в REST API, но когда я публикую данные, тогда сериализатор дает is_valid () как false.
Когда я упоминаю их как JSONFields, тогда сериализатор is_valid () имеет значение True и данные сохраняются, но при просмотре API на localhost выдает следующую ошибку: «Объект типа« ManyRelatedManager »не является сериализуемым JSON»
class B(models.model):
name = models.CharField()
class A(models.model):
b = models.ManyToManyField(B)
class BSerializer(serializer.modelSerializer):
class Meta:
model=B
fields = '__all__'
class ASerializer(serializer.ModelSerializer):
b = BSerializer(many=true)
def save(self):
b_data = self.validated_data.pop('b')
a = A.objects.create(**validated_data)
b_instance = B.objects.get(name=b_data['name'])
a.add(b_instance)
Это дает отличные результаты в пользовательском интерфейсе REST Framework при нажатии http://localhost:8000/a/REST, но когда я нажимаю запрос POST для почтальона с данными {'b': [{'name': 'foo'}]} Сериализатору не удается выполнить функцию is_valid ().
Но когда я изменяю код на это:
class ASerializer(serializer.ModelSerializer):
b = serializer.JSONField()
def save(self):
b_data = self.validated_data.pop('b')
a = A.objects.create(**validated_data)
b_instance = B.objects.get(name=b_data['name'])
a.add(b_instance)
Хит почтальона сохраняет данные для A, а затем добавляет к нему экземпляр b. Это видно, когда я вижу данные в оболочке Python. Но при просмотре в пользовательском интерфейсе REST Framework выдается следующая ошибка:
'Объект типа' ManyRelatedManager 'не поддерживает сериализацию в формате JSON'