Reputation: 467
I am trying to post array of objects in JSON data using Postman , but unable to create the object,how will i achieve it?Here is my code
```
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"
}
]
}]
}
I am getting this error: "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"
objects which i mentioned in the above JSON format.Any idea how to achieve this
Upvotes: 0
Views: 294
Reputation: 348
You can just pop class_time
before passing it to 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
Upvotes: 1