Django restframework。展开字段。属性错误

2024-10-16 20:43:38 发布

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

我的序列化程序中有展开字段。我发出请求 api/drivers/?expand=tractors\uuuuuu drivers\uuuuuu driver并获取错误: “试图获取序列化程序TractorSerializer上的字段make的值时,获取了AttributeError。 序列化程序字段的名称可能不正确,并且与TractorDriver实例上的任何属性或键都不匹配。 原始异常文本为:“TractorDriver”对象没有属性“make”

型号:

class Tractor(BaseModel):
    ...
    make = models.CharField("Make", max_length=32)
    ...

class TractorDriver(BaseModel):
    tractor = models.ForeignKey(
        Tractor,
        verbose_name="Tractor",
        on_delete=models.CASCADE,
        related_name="drivers",
    )
    driver = models.ForeignKey(
        Driver,
        verbose_name="Driver",
        on_delete=models.CASCADE,
        related_name="tractors",
    )
    ...


序列化程序:

class DriverSerializer(BaseModelSerializer):
    class Meta:
        model = Driver
        expandable_fields = dict(
            ...
            tractors=dict(
                serializer="safety.api.serializers.TractorSerializer", many=True,
            ),
            ...
class TractorDriverSerializer(BaseModelSerializer):
    class Meta:
        model = TractorDriver
        expandable_fields = dict(
            tractor=dict(serializer="safety.api.serializers.TractorSerializer", read_only=True),
            driver=dict(serializer="safety.api.serializers.DriverSerializer", read_only=True),
        )
class TractorSerializer(BaseModelSerializer):
    class Meta:
        model = Tractor
        expandable_fields = dict(
            ...
            drivers=dict(
                serializer="safety.api.serializers.TractorDriverSerializer", many=True,
            ),
            ...

观点:

class DriverStatusViewSet(BaseModelViewSet):
    queryset = DriverStatus.objects.all()
    serializer_class = DriverStatusSerializer

class TractorViewSet(BaseModelViewSet):
    queryset = Tractor.objects.all()
    serializer_class = TractorSerializer

class TractorDriverViewSet(BaseModelViewSet):
    queryset = TractorDriver.objects.all()
    serializer_class = TractorDriverSerializer

TractorDriver实例没有make字段Tractor实例包含make字段。 我不明白为什么它试图在TractorDriver实例中查找make字段


Tags: 实例name程序apimake序列化modelsdict