如何更改布尔字段以在Django中的序列化字段中显示Up=true或Down=False之类的值
我在Django Rest Framework中有一个要使用的序列化数据集,但我有一个问题要解决,有一个布尔字段,当我序列化它时,它显然会显示两个值:true或false,问题是我不想显示这些值,我想显示UP=true,DOWN=false 这些字段是:状态和ospf 我的模型如何更改布尔字段以在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
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"