如何在Django REST框架中更改字段名称 [英] How to change field name in Django REST Framework
问题描述
我正在尝试更改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屋!