Неверные данные. Ожидал словарь, а получил str
Ожидаемое поведение
Создать новый объект, используя идентификатор поля ForeignKey.
Актуальное поведение
Он работал нормально, когда класс Serializer выглядел следующим образом :
class RequestSerializer(serializers.ModelSerializer):
"""
Serializer for Request model
"""
class Meta:
"""
Meta class for RequestSerializer
"""
model = Request
fields = [
"id",
"category",
"type",
"finishing_type",
"finishing_level",
"need_design",
"number_of_floors",
"property_space",
"no_of_receptions",
"no_of_rooms",
"no_of_bathrooms",
"need_plumbing",
"need_electricity",
"need_paving",
"need_painting",
"need_carpentry",
"need_plastering_cementing",
"need_decorating",
"include_materials",
"need_installments",
"max_installments",
"min_installments",
"brief_about_the_request",
"expires_after_days",
"location",
]
Но затем я добавил вложенный Serializer, чтобы иметь возможность видеть больше деталей, когда я делаю запрос GET, так что теперь это выглядит так :
class RequestSerializer(serializers.ModelSerializer):
"""
Serializer for Request model
"""
location = CitySerializer(read_only=False)
class Meta:
"""
Meta class for RequestSerializer
"""
model = Request
...
Эта строка location = CitySerializer(read_only=False) помогла мне увидеть больше деталей в Get запросе, но позволяет опубликовать запрос.
NOTE.
Я использовал его как location = CitySerializer(read_only=True), но он также выдал эту ошибку :
NOT NULL constraint failed: requests_request.location_id
UPDATE
Вот данные CitySerializer :
class GovernorateSerializer(serializers.ModelSerializer):
"""
Governorate Serializer
"""
class Meta:
"""
Metaclass for GovernorateSerializer
"""
model = City
fields = ('name',)
class CitySerializer(serializers.ModelSerializer):
"""
Serializer for City model
"""
governorate = GovernorateSerializer(read_only=True)
class Meta:
"""
Metaclass for CitySerializer
"""
model = City
fields = ['name', 'governorate']
И ViewSet пользователь для этого процесса:
class RequestViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows requests to be viewed or edited.
"""
queryset = Request.objects.all()
permission_classes = (IsAuthenticated,)
serializer_class = RequestSerializer
def get_queryset(self):
"""
Controls what is visible to the user
"""
return self.queryset.all()
def perform_create(self, serializer):
"""
Sets the user to the request
"""
serializer.save(user=self.request.user)