У меня есть объект, который я хотел бы создать через пользовательский интерфейс django-rest-api.
Этот объект имеет множество полей, которые содержат другие объекты.
Даже если это поле пустое, для параметра установлено значение True, я получаю ответ, что «это поле обязательно для заполнения».
class Post(models.Model):
title = models.CharField(max_length=100)
slug = models.CharField(max_length=200, null=True)
description = models.CharField(max_length=200, null=True)
content = HTMLField('Content', null=True)
black_listed = models.ManyToManyField('profile_app.Profile', related_name='black_listed_posts', blank=True)
score = models.PositiveIntegerField(null=True, default=0, validators=[MaxValueValidator(100)])
serializers.py:
class PostSerializer(serializers.HyperlinkedModelSerializer):
black_listed = ProfileSerializer(many=True)
read_only = ('id',)
def create(self, validated_data):
self.black_listed = []
class Meta:
model = Post
fields = ('id', 'title', 'slug', 'description',
'content',
'black_listed', 'score')
views.py:
class PostViewSet(ModelViewSet):
serializer_class = PostSerializer
queryset = Post.objects.all()
lookup_field = "slug"
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.black_listed = []
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Как вы можете видеть, я попытался переопределить метод create()
как на сериализаторе, так и на наборе представлений, но это не сработало и все же дало мне обязательное заполнение поля black_list.
![enter image description here](https://i.stack.imgur.com/UdmEu.png)
То, что я ожидал, что если поле не требуется в БД, то сериализатор может установить его на None при создании
что мне здесь не хватает?
РЕДАКТИРОВАТЬ:
ProfileSerializer:
class ProfileSerializer(serializers.ModelSerializer):
interests = InterestSerializer(read_only=True, many=True)
class Meta:
model = Profile
fields = ('slug', 'user_id', 'image', 'role', 'work_at', 'interests')