Я создаю конечную точку api, используя django-rest-framework для конкретного входа json. У меня есть два взаимосвязанных модели, как это (давайте предположим, что пост может иметь только одну категорию):django rest framework вложенные объекты получить или создать поведение
class Category(models.Model):
name = models.CharField(max_length=10)
slug = models.SlugField()
class Post(models.Model):
category = models.ForeignKey()
title = models.CharField(max_length=100)
text = models.CharField(max_length=256)
и мой сериализатору простые модели сериализаторов:
class CategorySerializer(ModelSerializer):
id = serializers.IntegerField(required=True)
class Meta:
model = Category
class PostSerializer(ModelSerializer):
id = serializers.IntegerField(required=True)
category = CategorySerializer()
class Meta:
model = Post
и мой взгляд апи очень просто также:
class PostAPIView(mixins.CreateModelMixin, GenericAPIView):
serializer_class = PostSerializer
permission_classes = (IsAuthenticated,)
теперь для того, чтобы создавать сообщения мне нужно, чтобы разобрать вход JSON как это:
{
"id": 10,
"pk": 10
"title": "Some title",
"text": "Some text",
"category": {
"id": 15,
"pk": 15
"name": "Best category",
"slug": "best-category"
}
}
здесь параметры «pk» имеют решающее значение для меня, я хочу, чтобы данные были созданы на моем db, используя точный pk, предоставленный в json. Теперь, если я делаю почтовый запрос и нет сообщений с идентификатором: 10 и категориями с идентификатором: 15 все в порядке, а данные записываются в db, новые записи вставлены, но если они есть, когда rest-framework возвращает ошибку, например [ 'Post id 10 уже существует'], я бы хотел, чтобы соответствующие записи обновлялись в соответствии с вводом. Как я могу это сделать?
Если я добавляю put/patch, тогда для рамки rest требуется требуемые поля look_up и модель для представления, которое я создал, и поскольку я работаю с несколькими моделями с этим вводом, я не могу их предоставить .. – balkan