Как разместить массив объектов в django rest framework? - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь разместить массив объектов в JSON данных с помощью Почтальона, но не могу создать объект, как мне его достичь? Вот мой код

```
models.py
```

class Classes(models.Model):
    name = models.CharField(max_length=250, blank=True, null=True)
    description = models.CharField(max_length=1000, blank=True, null=True)

class ClassDaySlot(models.Model):
    class_id = models.ForeignKey(Classes, on_delete=models.CASCADE, blank=True, null=True,related_name='dayslot_classes')

    day = models.CharField(max_length=50, blank=True, null=True)



class ClassTimeSlot(models.Model):
    day_slot_id = models.ForeignKey(ClassDaySlot, on_delete=models.CASCADE, blank=True, null=True,related_name='my_class_timeslot')
    start_slot_time = models.TimeField(blank=True, null=True)
    end_slot_time = models.TimeField(blank=True, null=True)
```
serializers.py
```

class ClassUpdateSerializer(serializers.ModelSerializer):
    class_day = serializers.ListField()
    class_time = serializers.ListField()

    class Meta:
        model = Classes

    def create(self, validated_data):
        dayslot_validated_data = validated_data.pop('class_day', None)
        timeslot_validated_data = validated_data.pop('class_time', None)
        classes = Classes.objects.create(**validated_data)

        if dayslot_validated_data:
            for day_slot in dayslot_validated_data:
                created_day_class = ClassDaySlot.objects.create(**day_slot, class_id=classes)
                if timelot_validated_data:
                    for time_slot in timeslot_validated_data:
                        ClassTimeSlot.objects.create(**time_slot, day_slot_id=created_day_class)
        return classes

I have to post json data in postman exactly like this:
    {
    "class_day":[{
                "day":"friday",
                "class_time":[
                        {
                        "start_slot_time":"08:00:00+0000",
                        "end_slot_time":"09:00:00+0000"
                        }

                ]           

            }]
    }

Я получаю эту ошибку : "ClassDaySlot() got an unexpected keyword argument 'class_time'". if i give "class_time" outside "class_day" list, it works but i don't want that, what i want is to post array of "day" and "class_time" объекты, которые я упомянул в вышеуказанном формате JSON. Есть идеи, как этого добиться

1 Ответ

1 голос
/ 01 февраля 2020

Вы можете просто нажать class_time, прежде чем передать его ClassDaySlot.objects.create.

class ClassUpdateSerializer(serializers.ModelSerializer):
    class_day = serializers.ListField()

    class Meta:
        model = Classes

    def create(self, validated_data):
        dayslot_validated_data = validated_data.pop('class_day', None)
        classes = Classes.objects.create(**validated_data)

        if dayslot_validated_data:
            for day_slot in dayslot_validated_data:
                timeslot_validated_data = day_slot.pop('class_time', None)
                created_day_class = ClassDaySlot.objects.create(**day_slot, class_id=classes)
                if timelot_validated_data:
                    for time_slot in timeslot_validated_data:
                        ClassTimeSlot.objects.create(**time_slot, day_slot_id=created_day_class)
        return classes
...