I have been Django working on RoutePrice Model and I tried to serialize data in nested serializer, before nested serializer it was fine working clean but I got type error after nested serializer. Here is Model and my serializer I have tried so far.
class RoutePrice(BaseModel):
bus_company_route = models.ForeignKey(BusCompanyRoute, on_delete=models.PROTECT)
bus_type = models.ForeignKey(Category, on_delete=models.PROTECT)
seat_price_for_travel_agent = AmountField()
seat_price_for_user = AmountField()
seat_price_for_foreigner = AmountField(null=True, blank=True)
class Meta:
default_permissions = ()
verbose_name = 'Route Price'
verbose_name_plural = 'Route Prices'
constraints = [
models.UniqueConstraint(
fields=['bus_company_route', 'bus_type'],
name='unique_route_price'
)
]
and Here is how is serialized my data
class AddRoutePriceSerializers(serializers.ModelSerializer):
class Meta:
model = RoutePrice
fields = (
'bus_type',
'seat_price_for_travel_agent',
'seat_price_for_user',
'seat_price_for_foreigner',
)
class AddMultipleRoutePriceSerializers(serializers.Serializer):
data = AddRoutePriceSerializers(many=True)
I had my logic in usecases.py and views.py
#usecases.py
class AddRoutePriceUseCases(BaseUseCase):
def __init__(self,
serializer: AddMultipleRoutePriceSerializers,
bus_company_route: BusCompanyRoute):
self._serializer = serializer
self._data = serializer.validated_data
self._bus_company_route = bus_company_route
def execute(self):
self._factory()
def _factory(self):
print(self._data)
self.route_price = RoutePrice(**self._data, bus_company_route=self._bus_company_route)
try:
self.route_price.full_clean()
self.route_price.save()
except DjangoValidationError as e:
raise ValidationError(e.message_dict)
#views
class AddRoutePriceView(generics.CreateAPIView):
"""
Use this end-point to add route price to specific bus company route
"""
serializer_class = route_price_serializers.AddMultipleRoutePriceSerializers
def get_bus_company_route(self):
return GetBusCompanyRouteUseCase(
bus_company_route_id=self.kwargs.get(
'bus_company_route_id'
)
).execute()
def perform_create(self, serializer):
return AddRoutePriceUseCases(serializer=serializer,
bus_company_route=self.get_bus_company_route()
).execute()
I got error saying Route
RoutePrice() got an unexpected keyword argument 'data'
what is wrong in nested serializer I think I made wrong there?