Sho*_*jaz 78 django django-rest-framework
我试图在DRF Serializer中更改模型字段名称,如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
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
我也尝试在Django Queryset中添加别名但无法更改.
更新
这是我面临的例外
/ ViewName /'module'对象的AttributeError没有属性'Field'
我怎样才能做到这一点?
谢谢
ian*_*kit 191
串行器字段和序列化器中有一个非常好的功能,通常称为"源",您可以在其中指定模型字段中的数据源.
class ParkSerializer(serializers.ModelSerializer):
location = serializers.SomeSerializerField(source='alternate_name')
class Meta:
model = Park
fields = ('other_fields', 'location')
Run Code Online (Sandbox Code Playgroud)
其中serializers.SomeSerializerField可以是serializers.CharField,如模型所示,但也可以是任何其他字段.你也可以把关系字段和其他序列化器放在一起,这仍然可以像魅力一样工作.即使alternate_name是另一个模型的foreignkey字段.
class ParkSerializer(serializers.ModelSerializer):
locations = AlternateNameSerializer(source='alternate_name', many=true)
class Meta:
model = Park
fields = ('other_fields', 'locations')
class AlternateNameSerializer(serializers.ModelSerialzer):
class Meta:
model = SomeModel
Run Code Online (Sandbox Code Playgroud)
这也适用于创建,删除和修改请求类型.它有效地创建了序列化器中字段名称和模型中字段名称的一对一映射.
ert*_*ion 38
你可以使用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
Run Code Online (Sandbox Code Playgroud)
这是 Park Model的Serializer,ParkSerializer.这会将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
Run Code Online (Sandbox Code Playgroud)
然而,这仅适用于只读字段.
vij*_*jay 12
这也适用于写操作
class ParkSerializer(serializers.ModelSerializer):
location = serializers.CharField(source='alternate_name')
class Meta:
model = Park
fields = ('id', 'name', 'location')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44759 次 |
最近记录: |