Django Rest框架许多字段排序

2024-05-06 12:15:40 发布

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

我有以下型号:

class BusStop(m.Model):
    street_name = m.CharField(max_length=255)

    class Meta:
        ordering = ['street_name']
    ...

class Carrier(m.Model):
    name = m.CharField(max_length=255)
    ...

class CarrierStop(m.Model):
    bus_stop = m.ManyToManyField(BusStop, related_name='carrier_stop_fk')
    carrier = m.ForeignKey(Carrier, on_delete=m.CASCADE, related_name='test_carrier_fk')

我做了序列化程序:

^{2}$

我有一些BusStop模型的对象,序列化程序给出如下表示:

    [
        {
            "id": 1,
            "carrier": "Fremiks",
            "bus_stop": [
                    "Armii Krajowej",
                    "Kino Lot 01",
                    "Kosynierów I 02"
            ]
        }
    ]

CarrierStopSerializer的bus_stop字段返回按名称排序的公交站点。我想通过Django manytomy字段创建的中间表carrierstop_bus_stop中的id进行排序。我知道我应该使用SerializerMethod字段而不是StringRelatedField(或者PrimaryKeyRelatedField,这无关紧要),但我不确定如何确切地做到这一点。在


Tags: namestreetmodel序列化lengthmaxclassstop
1条回答
网友
1楼 · 发布于 2024-05-06 12:15:40

使用SerializerMethodField作为

class CarrierStopSerializer(serializers.ModelSerializer):
    carrier = serializers.StringRelatedField()
    bus_stop = serializers.SerializerMethodField(read_only=True)

    def get_bus_stop(self, model):
        return [bus_stop.__str__() for bus_stop in model.bus_stop.all().order_by('id')]

    class Meta:
        model = CarrierStop
        fields = ['id', 'carrier', 'bus_stop']

相关问题 更多 >