首页 > 解决方案 > 在前端使用 React 将两个对象发送到 Django Rest 框架,但只有最后一个对象出现在 Django Rest 框架中

问题描述

我正在尝试在 Django Rest Framework 中创建这样的数据结构:

[
    {
        "id": 1,
        "name": "Alamos",
        "modeltask": [
                {
                "uid": "1",
                "priority": 1,
                "task": {
                    "time": 0.0,
                    "student": 0 }
                    }
                ,
                   {
                "uid": "2",
                "priority": 2,
                "task": {
                    "time": 0.0,
                    "student": 0 }
                    }
                   ]
                 

然而,即使我使用 React 发送两个具有 2“uid”的对象并将其发送到 Django。我使用 Mozilla 的 React 工具进行了检查,它在前端显示了这两个对象。然而,在将它们发送到后端之后,django rest 框架中只出现了最新的对象,在上面的例子中,只有 ("uid": "2") 的对象。所以不知道哪里出错了?

现在在 Django Restful 中是这样的:

    {
        "id": 1,
        "name": "Alamos",
        "modeltask": [
                   {
                "uid": "2",
                "priority": 2,
                "task": {
                    "time": 0.0,
                    "student": 0 }
                    }
                   ]

我的模型.py

class Main(models.Model):
  id= models.AutoField(primary_key=true)
  name = models.CharField(max_length=120, blank=True, null=True)
  def __str__(self):
      return self.name
  @property
  def modeltask(self):
      return self.modeltask_set.all()
class ModelTask(models.Model):
   uid =models.CharField(max_length=120, blank=True, null=True)
   priority= models.IntegerField(blank = True, null=True)
   main = models.ForeignKey(Main, on_delete=models.CASCADE) 
   def __str__(self):
     return self.uid
class Task(models.Model):
   time = models.FloatField(blank=True, null=True)
   student =models.IntegerField(blank=True, null = True)

这是我的serializers.py:

class TaskSerializer(serializers.ModelSerializer):
     class Meta:
            model = Task
            fields =['time', 'student']
class ModelTaskSerializer(serializers.ModelSerializer):
     task = TaskSerializer(required =True)
     class Meta:
            model = ModelTask
            field = ['uid', 'priority', 'student']
     def create(self,validated_data):
            task_data =validated_data.pop('task')
            modeltask = ModelTask.objects.create(**validated_data)
            task.objects.create(**task_data, section =task)
            return modeltask
class MainSerializer(serializers.ModelSerializer):
     task = TaskSerializer(many=true)
     class Meta: 
            model = Main
            field = ['id','name','modeltask']
     def create(self,validated_data):
            modeltask = modeltask_data ('modeltask')
            Name = Main.object.create(**validated_data)
            Name.save()
            for data in modeltask:
                task =data.pop('task')
                modeltask_section=ModelTask.objects.create(**data, Name = Name)
     def update(self,instance, validated_data):
            modeltask = validated_data.pop('modeltask')
            instance.name =validated_data.get('name', instance.name)
            instance.save()
            modeltask_id =[]
            for data in modeltask:
                task = data.pop('task')
                for  'id' in data.key():
                    if ModelTask.objects.filter(id =data["id"]).exists():
                       r =Shell.objects.get(id=data["id"])
                       r.uid = data.get("uid",r.uid)
                       r.priority =data.get("priority",r.priority)
                       r.save()
                       Task.objects.create(**task,section=r)
                       modeltask_id.append(r.id)
                    else:
                       instance.modeltask.delete()
                       r =ModelTask.objects.create(**data,Name =instance)
                       Task.objects.create(**task,section =r)
                       modeltask_id.append(r.id)
           for data in instance_modeltask:
                if data.id not in modeltask_id:
                       data.delete()
                       instance.save()
                return instance

和views.py

class MainView(viewsets.ModelViewSet):
     serializer_class = MainSerializer
     queryset = Main.objects.all()
     lookup_field= 'id'
class ModelTaskView(viewsets.ModelViewSet):
     serializer_class=ModelTaskSerializer
     queryset = ModelTask.objects.all()
     lookup_field = 'id'
class TaskView(viewsets.ModelViewSet):
     serializer_Class =TaskSerializer
     queryset = Task.objects.all()
     lookup_field = 'id'

标签: javascriptdjangoreactjsdjango-rest-framework

解决方案


推荐阅读