通过将模型转换为json格式来转换选择值

时间:2016-04-02 20:20:49

标签: django django-models django-forms django-templates django-views

我有那个模特。

ESTADO=(
    (0,'Desabilitado'),
    (1,'Habilitado')
)

class Cargo(models.Model):
    nombre = models.CharField(max_length=50,verbose_name='Nombre',unique=True)
    descripcion = models.CharField(max_length=100,verbose_name='Descripcion', blank=True)
    estado = models.IntegerField(choices=ESTADO,default=1, verbose_name='Estado')

    def __unicode__(self):
        return '%s - %s'%(self.nombre,self.get_estado_display())

class Meta:
    verbose_name = 'Cargo'
    verbose_name_plural = 'Cargos'
    ordering = ['-nombre']

我有这个观点:

def listar_cargos(request):
    object_list = Cargo.objects.all()
    json = serializers.serialize('json', object_list)
    return HttpResponse(json, content_type='application/json')

如果您运行它,则返回给我:

[
    {
        "fields": {
            "descripcion": "sdsds",
            "nombre": "dsds",
            "estado": 1
        },
        "model": "inventario.cargo",
        "pk": 4
    },
    {
        "fields": {
            "descripcion": "Limpia",
            "nombre": "Conserje",
            "estado": 1
        },
         "model": "inventario.cargo",
        "pk": 2
    }
]

当我回到我身边?已被转换为choise的价值。也就是说     {         “descripcion”:“sdsds”,         “nombre”:“dsds”,         “estado”:“Activo”     }

1 个答案:

答案 0 :(得分:1)

class Cargo(models.Model): 
    nombre = models.CharField(max_length=50,verbose_name='Nombre',unique=True) 
    descripcion = models.CharField(max_length=100,verbose_name='Descripcion', blank=True) 
    estado = models.IntegerField(choices=ESTADO,default=1, verbose_name='Estado')

    def __unicode__(self):
        return '%s - %s'%(self.nombre,self.get_estado_display())

    class Meta:
        verbose_name = 'Cargo'
        verbose_name_plural = 'Cargos'
        ordering = ['-nombre']

    @property
    def get_estado(self):
        return self.get_estado_display()

然后在序列化程序定义中使用model_obj.get_estado而不是model_obj.estado。

您可能必须使用Django Rest Framework才能成功完成此操作。如果是这样,请参阅此问题https://stackoverflow.com/a/28954424/331974