Отправьте два объекта в инфраструктуру Django Rest с React во внешнем интерфейсе, но только самый последний из них появится в структуре Django Rest - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь создать такую ​​структуру данных в 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 }
                    }
                   ]
                 

Однако даже когда я отправляю два объекта с 2 "uid", как указано выше, с React и отправляю их в Django. Я проверил с помощью инструмента React для Mozilla, и он показывает оба объекта впередний конец.Однако, после отправки их в бэкэнд, в django rest framework появляется только последний объект, в приведенном выше случае это только объект ("uid": "2").Так что я не знаю, где это идет не так?

Прямо сейчас в Django Restful выглядит так:

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

My models.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)

Вот мои сериализаторы.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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...