我正在使用django-rest-framework为特定的json输入创建一个api端点。我有两个相关的模型(假设帖子只能有一个类别):
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
我的api观点也非常简单:
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'参数对我来说至关重要,我希望使用json中提供的精确pk在我的数据库上创建数据。现在,如果我发布帖子请求并且没有id为10的帖子和id为15的类别一切正常并且数据写入db新记录插入,但是如果有任何rest-framework返回错误,如[ '帖子ID 10已存在'],我希望根据输入匹配记录更新。我怎么能这样做?
答案 0 :(得分:0)
您只需添加 UpdateMixin ,只需将其导入为 CreateModelMixin 即可。 这个mixin将实现更新和部分更新方法,这将做你想要的。 但是您无法发送 POST ,因此您需要 PUT 或 PATCH 。您想在 POST 上执行此操作,我建议您实现自己的创建视图方法。