Python 未发送JSON数据-Django Rest Framework/React

Python 未发送JSON数据-Django Rest Framework/React,python,json,reactjs,django-rest-framework,Python,Json,Reactjs,Django Rest Framework,所以,我是Django的新手,经过几个小时的搜索/尝试不同的东西后,我无法理解这一点 我有一个表单,它将我的组件状态提交给api,将值添加到数据库,然后在表中显示它们。除了projects字段外,所有内容都进入了数据库。当我查看React Dev工具时,我期望的值处于我的状态 project: 3 但是在我提交表单之后,返回值显示为null project: null 我真的不知道为什么这个值是空的 这是我的模特 class Completed(models.Model): comp

所以,我是Django的新手,经过几个小时的搜索/尝试不同的东西后,我无法理解这一点

我有一个表单,它将我的组件状态提交给api,将值添加到数据库,然后在表中显示它们。除了projects字段外,所有内容都进入了数据库。当我查看React Dev工具时,我期望的值处于我的状态

project: 3
但是在我提交表单之后,返回值显示为null

project: null
我真的不知道为什么这个值是空的

这是我的模特

class Completed(models.Model):
    completed = models.BooleanField(default=False)
    url = models.CharField(max_length=100)
    handle = models.CharField(max_length=30)
    filename = models.CharField(max_length=100)
    size = models.IntegerField()
    source = models.CharField(max_length=50)
    uploadId = models.CharField(max_length=50)
    originalPath = models.CharField(max_length=50)
    owner = models.ForeignKey(
        User, related_name="completed", on_delete=models.CASCADE, null=True)
    project = models.ForeignKey(
        Project, related_name="projectId", on_delete=models.CASCADE, null=True)
    uploadDate = models.DateTimeField(auto_now_add=True)
这是项目模型

class Project(models.Model):
    projectCode = models.CharField(max_length=10)
    projectName = models.CharField(max_length=100)
    user = models.ForeignKey(
        User, related_name="projects", on_delete=models.CASCADE, null=True)
    editor = models.ForeignKey(
        User, on_delete=models.CASCADE, null=True)
    creationDate = models.DateTimeField(auto_now_add=True)
    completedDate = models.DateTimeField(null=True, blank=True)
    dueDate = models.DateTimeField(null=True, blank=True)

    def __str__(self):
        return f"{self.projectName}"
下面是序列化程序

# Project Serializer


class ProjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = Project
        fields = [
            'id',
            'projectCode',
            'projectName',
            'user'
        ]
        depth = 1

# Completed Serializer


class CompletedSerializer(serializers.ModelSerializer):
    # project = ProjectSerializer()

    class Meta:
        model = Completed
        fields = [
            'completed',
            'url',
            'handle',
            'filename',
            'size',
            'source',
            'uploadId',
            'originalPath',
            'owner',
            'project',
            'uploadDate'
        ]
        depth = 1
我尝试将ProjectSerializer添加到CompletedSerializer中,但它给了我400个错误请求

这是视图集

class CompletedViewSet(viewsets.ModelViewSet):
    permission_classes = [
        permissions.IsAuthenticated
    ]

    serializer_class = CompletedSerializer

    def get_queryset(self):
        queryset = self.request.user.completed.all().filter(completed=True)
        return queryset

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)
有人能告诉我我做错了什么吗?

您在序列化程序上使用的是depth=1。这意味着您的ForeignKey将具有嵌套序列化程序。默认情况下,嵌套序列化程序是只读的。如果需要一个可写的嵌套序列化程序,则必须在CompletedSerializer上取消对project=ProjectSerializer的注释,并传递创建项目实例所需的所有数据。我认为这不是你想要的。如果我理解得很好,您只想引用现有的项目。因此,在我看来,实现这一点的最佳方法是删除CompletedSerializer上的深度。如果在列出或检索已完成的实例时需要该项目,请根据请求操作使用不同的序列化程序。下面是有关可写嵌套序列化程序的更多详细信息

对于使用不同的序列化程序,这是一个参考。在视图集中添加以下代码:

    def get_serializer_class(self):
        if self.action == 'list' or self.action == 'retrieve':
            return CompletedNestedSerializer
        return CompletedSerializer