Я пытаюсь создать generics.CreateAPIView в соответствии с документацией DRF.
У меня есть это (я могу включить свой PageSerializer, если это будет полезно:
class PageCreateView(generics.CreateAPIView):
queryset = Page.objects.all()
serializer_class = PageSerializer
Вот моя модель:
class Page(models.Model):
date = models.DateField("Post date")
intro = models.CharField(max_length=600)
title = models.CharField(max_length=255)
chinese = models.TextField(blank=True)
english = models.TextField(blank=True)
json = JSONField(default=dict, null=True, blank=True)
category = models.ForeignKey(
Category, on_delete=models.CASCADE)
calculated_hsk = models.DecimalField(
default=1, max_digits=3, decimal_places=2)
translated = models.BooleanField(default=False)
Я пытаюсь использовать конечную точку POST, однако, когда у меня есть такой запрос POST:
{
"translated": true,
"category": 1,
"title": "Test POST title",
"english": "Test English Text",
"chinese": "我是一个兵",
"intro": "test intro",
"date": "2020-08-02",
"calculated_hsk": 3.5,
"json": {
}
}
, я получаю следующую ошибку:
{
"category": {
"non_field_errors": [
"Invalid data. Expected a dictionary, but got int."
]
}
}
Когда я пытаюсь поместить его в dict, я получаю запросы на поля для категории, которая представляет собой совершенно отдельную таблицу.
У меня нет желания создавать новую запись категории каждый раз, когда я создать новую страницу - я просто хочу связать страницу с категорией.
Как мне это сделать?
Сериализаторы:
class CategorySerializer(serializers.Serializer):
name = serializers.CharField()
id = serializers.IntegerField()
class PageSerializer(serializers.ModelSerializer):
category = CategorySerializer(many=False)
class Meta:
model = Page
fields = ['date', 'intro', "chinese", "english",
"calculated_hsk", "translated", "json", "id", "category", "title"]