Python Django |带有嵌套对象的 POST 方法。 NOT NULL 约束失败

乘风 python 186

原文标题Python Django | POST method with nested object. NOT NULL constraint failed

我的意思是用一个只有 ID 的嵌套对象来实现 post 方法。当我使用嵌套 objectpostmethod 的所有字段时工作正常。但我只想传递一个字段,它是 ID,其他字段必须是不需要的

现在我收到了类似的错误

NOT NULL 约束失败:article_article.author_id

models.py

class Author(models.Model):
    first_name = models.CharField(max_length=20, blank=True, null=True)
    last_name = models.CharField(max_length=20, blank=True, null=True)
    nickname = models.CharField(max_length=20, blank=True, null=True)

    def __str__(self):
        return self.nickname


class Article(models.Model):
    title = models.CharField(max_length=120, unique=True)
    description = models.TextField(blank=True)
    author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='articles')
    created_at = models.DateTimeField(auto_now_add=True, blank=True)
    updated_at = models.DateTimeField(auto_now=True, blank=True)

    def __str__(self):
        return self.title

views.py

class ArticleView(APIView):
    def get(self, request, pk=None):
        if pk:
            article = Article.objects.get(pk=pk)
            serializer = ArticleSerializer(article, many=False)
        else:
            articles = Article.objects.all()
            serializer = ArticleSerializer(articles, many=True)

        return Response(serializer.data)

    def post(self, request):
        data = request.data
        serializer = ArticleSerializer(data=data)
        if serializer.is_valid(raise_exception=True):
            article_saved = serializer.save()
        return Response({"success": "Article '' created successfully".format(article_saved.title)},
                        status=status.HTTP_201_CREATED)

serializers.py

class AuthorSerializer(serializers.Serializer):
    first_name = serializers.CharField(required=False)
    last_name = serializers.CharField(required=False)
    nickname = serializers.CharField(required=False)


class ArticleSerializer(serializers.Serializer):
    title = serializers.CharField(max_length=120)
    description = serializers.CharField()
    author = AuthorSerializer(required=False)

    def create(self, validated_data):
        author_data = validated_data.pop('author', None)

        if author_data:
            author = Author.objects.get_or_create(**author_data)[0]
            validated_data['author'] = author
        return Article.objects.create(**validated_data)

原文链接:https://stackoverflow.com//questions/71554320/python-django-post-method-with-nested-object-not-null-constraint-failed

回复

我来回复
  • HackerMF的头像
    HackerMF 评论

    我得到了它。我应该只将字段 ID 添加到序列化程序中

    class AuthorSerializer(serializers.Serializer):
        first_name = serializers.CharField(required=False)
        last_name = serializers.CharField(required=False)
        nickname = serializers.CharField(required=False)
    

    id = 序列化程序.IntegerField()

    2年前 0条评论