Django REST Framework - 在序列化程序中获取布尔字段的反转值

Django REST Framework - Get reversed value of boolean field in serializer

我有 2 个模型:

class Model(models.Model):
...

    related = models.ForeignKey(
        'RelatedModel',
        on_delete=models.CASCADE,
        related_name='related_model'
    )

class RelatedModel(models.Model):
...

    flag = models.BooleanField()

我需要在模型实例序列化程序中传递 RelatedModel 属性的 'flag' 值,另外这个值必须反转,即如果它是 'True',我应该 return 'False' 作为布尔数据类型。

已经用方法实现了:

class ModelSerializer(serializers.ModelSerializer):
    ...
    flag = serializers.SerializerMethodField()

    @staticmethod
    def get_flag(obj):
        return not obj.related.flag

    class Meta:
        model = Model
        fields = (
            ...
            flag
        )

但也许有机会只使用像这样但具有反向值的序列化程序字段?

flag = serializers.BooleanField(
        source='related.flag', read_only=True
    )

如果您需要反转您不能使用 BooleanField 的值,最简单的解决方案是使用 SerializerMethodField,就像您已经做过的那样。或者您也可以创建一个自定义字段 class,但那样会更复杂。