如何更改布尔字段以在Django中的序列化字段中显示Up=true或Down=False之类的值

如何更改布尔字段以在Django中的序列化字段中显示Up=true或Down=False之类的值,django,django-rest-framework,Django,Django Rest Framework,我在Django Rest Framework中有一个要使用的序列化数据集,但我有一个问题要解决,有一个布尔字段,当我序列化它时,它显然会显示两个值:true或false,问题是我不想显示这些值,我想显示UP=true,DOWN=false 这些字段是:状态和ospf 我的模型 class Interfaces(models.Model): id_interface = models.PositiveIntegerField(primary_key=True) id_Equip

我在Django Rest Framework中有一个要使用的序列化数据集,但我有一个问题要解决,有一个布尔字段,当我序列化它时,它显然会显示两个值:true或false,问题是我不想显示这些值,我想显示UP=true,DOWN=false

这些字段是:状态和ospf

我的模型

class Interfaces(models.Model):

    id_interface = models.PositiveIntegerField(primary_key=True)
    id_EquipoOrigen = models.ForeignKey(Equipos, on_delete=models.DO_NOTHING, related_name='equipo_origen')
    id_PuertoOrigen = models.ForeignKey(Puertos, on_delete=models.DO_NOTHING, related_name='puerto_origen', null=True, blank=True)
    estatus = models.BooleanField(default=False)
    etiqueta_prtg = models.CharField(max_length=80, null=True, blank=True)
    grupo = models.PositiveSmallIntegerField(default=0, blank=True)
    if_index = models.PositiveIntegerField(default=0, blank=True)
    bw = models.PositiveSmallIntegerField(default=0, blank=True)
    bw_al = models.PositiveSmallIntegerField(default=0, blank=True)
    id_prtg = models.PositiveSmallIntegerField(default=0, blank=True)
    ospf = models.BooleanField(default=False)
    description = models.CharField(max_length=200, null=True, blank=True)
    id_EquipoDestino = models.ForeignKey(Equipos, on_delete=models.DO_NOTHING, related_name='equipo_destino')
    id_PuertoDestino = models.ForeignKey(Puertos, on_delete=models.DO_NOTHING, related_name='puerto_destino')
    ultima_actualizacion = models.DateTimeField(auto_now=True)


我的序列化器模型接口

class InterfaceSerializer(serializers.ModelSerializer):

    EquipoOrigen = serializers.CharField(source='id_EquipoOrigen.nombre',read_only=True)
    PuertoOrigen = serializers.CharField(source='id_PuertoOrigen.nombre',read_only=True)
    LocalidadOrigen=serializers.CharField(source='id_EquipoOrigen.localidad',read_only=True)
    CategoriaOrigen=serializers.CharField(source='id_EquipoOrigen.categoria',read_only=True)
    EquipoDestino = serializers.CharField(source='id_EquipoDestino.nombre',read_only=True)
    PuertoDestino = serializers.CharField(source='id_PuertoDestino.nombre',read_only=True)
    LocalidadDestino=serializers.CharField(source='id_EquipoDestino.localidad',read_only=True)
    CategoriaDestino=serializers.CharField(source='id_EquipoDestino.categoria',read_only=True)
    Vendedor=serializers.CharField(source='id_EquipoOrigen.vendedor',read_only=True)

    class Meta:

        model=Interfaces
        fields=('id_interface','id_EquipoOrigen','EquipoOrigen','id_PuertoOrigen','PuertoOrigen','LocalidadOrigen','CategoriaOrigen','Vendedor','estatus','etiqueta_prtg','grupo','if_index','bw','bw_al','id_prtg','ospf','description','id_EquipoDestino','EquipoDestino','id_PuertoDestino','PuertoDestino','LocalidadDestino','CategoriaDestino','ultima_actualizacion',) 


快速且只读的方法是使用

支持读/写的最完整的方法是创建一个自定义的。覆盖
到_表示法
到_内部_值
,以处理布尔值和自定义表示法之间的转换。

您可以使用


像这样,您可以对任何其他字段执行操作。

您只想检索数据,还是同时发布数据?目前我希望这些更改能够发布,但我想了解这两种方法是不是没有办法专门针对查询集执行此操作?因为只有Excel记录下载才有必要我不明白。。。您曾询问Django Rest Framework序列化程序,为什么现在涉及Excel?请不要关注Excel,告诉我是否有可能在queryset中执行上述操作,或者与上述属性一样执行失败,因为事实是文档不太理解,但我还是不明白你在问什么。。。“在查询集中”是什么意思?序列化程序是调整queryset如何转换为JSON格式的正确位置。朋友,我们将保留它,因为我希望将其序列化为自定义表示,但我希望它支持读/写,由于我正在阅读DRF文档,但我不了解属性to_representation to_internal_values这对我来说只适用于阅读,因此我也想实现它以进行编辑。非常感谢您能够使用该表示进行PUT,以便通过修改表示来更改布尔值​​也会实现。你明白我的意思吗?

class InterfacesViewSet(viewsets.ModelViewSet):


    queryset = Interfaces.objects.all()
    serializer_class = InterfaceSerializer
    pagination_class = PostPageNumberPagination
    filter_class = InterfacesFilter


class InterfaceSerializer(serializers.ModelSerializer):

estatus = serializers.SerializerMethodField(method_name='conversion_bool')
EquipoOrigen = serializers.CharField(source='id_EquipoOrigen.nombre',read_only=True)
PuertoOrigen = serializers.CharField(source='id_PuertoOrigen.nombre',read_only=True)
LocalidadOrigen=serializers.CharField(source='id_EquipoOrigen.localidad',read_only=True)
CategoriaOrigen=serializers.CharField(source='id_EquipoOrigen.categoria',read_only=True)
EquipoDestino = serializers.CharField(source='id_EquipoDestino.nombre',read_only=True)
PuertoDestino = serializers.CharField(source='id_PuertoDestino.nombre',read_only=True)
LocalidadDestino=serializers.CharField(source='id_EquipoDestino.localidad',read_only=True)
CategoriaDestino=serializers.CharField(source='id_EquipoDestino.categoria',read_only=True)
Vendedor=serializers.CharField(source='id_EquipoOrigen.vendedor',read_only=True)

class Meta:

    model=Interfaces
    fields=('id_interface','id_EquipoOrigen','EquipoOrigen','id_PuertoOrigen','PuertoOrigen',
            'LocalidadOrigen','CategoriaOrigen','Vendedor','estatus','etiqueta_prtg','grupo',
            'if_index','bw','bw_al','id_prtg','ospf','description','id_EquipoDestino',
            'EquipoDestino','id_PuertoDestino','PuertoDestino','LocalidadDestino','CategoriaDestino',
            'ultima_actualizacion',)

def conversion_bool(self, instance):
    if instance.estatus == True:
        return "Up"
    else:
        return "Down"