Django:在嵌套序列化程序之后获得了意外的关键字参数

2024-06-01 09:40:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在处理RoutePrice模型,并尝试在嵌套序列化程序中序列化数据,在嵌套序列化程序之前,它可以正常工作,但在嵌套序列化程序之后,我得到了类型错误。这是我迄今为止尝试过的模型和序列化程序

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'
            )
        ]

下面是如何序列化我的数据

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)

我的逻辑在usecases.py和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)

#视野

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()

我说路线时出错了

RoutePrice() got an unexpected keyword argument 'data'

嵌套序列化程序中有什么问题


Tags: self程序fordata序列化modelsdefroute