I created nested serializers and during validate method in parent serializer I don't have any data from child serializer. When i raise error with 'attrs' as message then i get only data from 'pk' and 'name' fields. How can i get data from OpenningTimeSerializer in WarehouseSerializer??
serializers.py
class OpenningTimeSerializer(serializers.ModelSerializer):
class Meta:
model = OpenningTime
fields = ['weekday', 'from_hour', 'to_hour']
class WarehouseSerializer(serializers.ModelSerializer):
openning_time = OpenningTimeSerializer(many=True)
class Meta:
model = Warehouse
fields = ['pk', 'name', 'openning_time']
def validate(self, attrs):
raise serializers.ValidationError(attrs)
models.py
class Time(models.Model):
from_hour = models.TimeField()
to_hour = models.TimeField()
class Meta:
abstract = True
constraints = [
models.CheckConstraint(
check=Q(from_hour__lt=F('to_hour')),
name='%(class)s_check_hours'
)
]
class OpenningTime(Time):
weekday = models.IntegerField(
choices=WEEKDAYS)
def __str__(self):
return f"{self.get_weekday_display()} {self.from_hour.strftime('%H:%M')}-{self.to_hour.strftime('%H:%M')}"
class Warehouse(models.Model):
name = models.CharField(max_length=255, unique=True)
openning_time = models.ManyToManyField(OpenningTime)
def __str__(self):
return self.name
Okey, I figured this out. I can have access to data from child serializers by self.initial_data, additionally need to convert string data and pass to serializer.
def validate(self, attrs):
openning_data = json.loads(self.initial_data['openning_time'])
serializer = OpenningTimeSerializer(data=openning_data)
if not serializer.is_valid():
raise serializers.ValidationError(serializer.errors)
serializer.data