如何在Django REST框架中更改字段名称 [英] How to change field name in Django REST Framework

查看:1577
本文介绍了如何在Django REST框架中更改字段名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试更改DRF序列化器中的模型字段名称,如SQL中的别名。我尝试了不同的方法,但不能成功。



models.py

  class Park(models.Model):
name = models.CharField(max_length = 256)
alternate_name = models.CharField(max_length = 256,blank = True)
objects = models.GeoManager()

class Meta:
db_table = u'p_park'

def __unicode __(self):
return' %s'%self.name

def alias_alternate_name(self):
return self.alternate_name

serializers.py

  class ParkSerializer(serializers.ModelSerializer) 

location = serializers.Field(source ='alias_alternate_name')
#location = serializers.SerializerMethodField(source ='alias_alternate_name')

#alternate_name作为位置


class Meta:
model = Park
fields =('id','name',我还尝试在Django Queryset中添加别名但不能更改。



已更新



这是我面临的例外


/ ViewName /'module'对象的AttributeError没有属性'Field'


我该怎么做?



谢谢

解决方案

您可以使用 serializers.SerializerMethodField



以下是模型 Park, name和alternate_name字段。

  class Park(models.Model):
name = models.CharField(max_length = 256)
alternate_name = models.CharField(max_length = 256,blank = True)
objects = models.GeoManager()

class Meta:
db_table = u'p_park'

def __unicode __(self):
return'%s'%self.name

这是Park Model,ParkSerializer的Serializer 。这将将alternate_name的名称更改为location。

  class ParkSerializer(serializers.ModelSerializer):
location = serializers.SerializerMethodField('get_alternate_name')

class Meta:
model = Park
fields =('other_fields','location')

def get_alternate_name(self,obj):
return obj.alternate_name

然而,这只适用于只读字段。


I am trying to change Model field name in DRF Serializer like alias in SQL. I have tried different methods but cannot succeed.

models.py

class Park(models.Model):
    name = models.CharField(max_length=256)
    alternate_name = models.CharField(max_length=256, blank=True)
    objects = models.GeoManager()

    class Meta:
        db_table = u'p_park'

    def __unicode__(self):
        return '%s' % self.name

    def alias_alternate_name(self):
        return self.alternate_name

serializers.py

class ParkSerializer(serializers.ModelSerializer):

    location = serializers.Field(source='alias_alternate_name')
    #location = serializers.SerializerMethodField(source='alias_alternate_name')

    #alternate_name as location


    class Meta:
        model = Park
        fields = ('id', 'name', 'location')

I have also tried to add alias in Django Queryset but cannot changed.

Updated

This is the exception that i am facing

AttributeError at /ViewName/ 'module' object has no attribute 'Field'

How can i do this?

Thank you

解决方案

You can use serializers.SerializerMethodField:

Here is the model Park, which has name and alternate_name fields.

class Park(models.Model):
    name = models.CharField(max_length=256)
    alternate_name = models.CharField(max_length=256, blank=True)
    objects = models.GeoManager()

    class Meta:
        db_table = u'p_park'

    def __unicode__(self):
        return '%s' % self.name

Here is Serializer for Park Model, ParkSerializer. This changes the name of alternate_name to location.

class ParkSerializer(serializers.ModelSerializer):
    location = serializers.SerializerMethodField('get_alternate_name')

    class Meta:
        model = Park
        fields = ('other_fields', 'location')

    def get_alternate_name(self, obj):
        return obj.alternate_name

This would however work only for read only fields.

这篇关于如何在Django REST框架中更改字段名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆