Tim*_*ony 4 django django-rest-framework
我有一个代表房子的模型:
class House(models.Model):
name = models.CharField(...)
long = models.FloatField(...)
lat = models.FloatField(...)
Run Code Online (Sandbox Code Playgroud)
和一个序列化器,以最基本的表示形式返回房屋列表:
class HouseSerializer(serializers.ModelSerializer):
class Meta:
model = House
fields = ('id', 'name')
Run Code Online (Sandbox Code Playgroud)
和观点
class HouseList(generics.ListAPIView):
queryset = House.objects.all()
serializer_class = HouseSerializer
Run Code Online (Sandbox Code Playgroud)
这很好用.我可以访问/api/house/,我看到一个json的房屋列表:
{
'id': 1,
'name': 'Big House'
},
{
'id': 1
'name': 'Small House',
}...
Run Code Online (Sandbox Code Playgroud)
现在我想创建第二个视图/资源/api/maps/markers/,返回我的房子作为格式的Google-Map-Friendly标记列表:
{
'id': 1,
'long': ...,
'lat': ...,
'houseInfo': {
'title': "Big House",
}
} ...
Run Code Online (Sandbox Code Playgroud)
我可以预见两种方法:
Response但是我没有采用任何方法,我明白如何处理它,哪种方法更可取?
答案1
在我看来你需要两者 - 不同的视图和序列化器.
仅仅因为视图端点不是第一个的子网址,所以它们不相关 - 不同的视图,即使它们使用相同的模型.
和不同的序列化器 - 因为你有不同的字段布局.
不确定你的情况有多复杂,但无论如何,任何代码重复都可能由mixin解决.
答案2
根据用例:
如果它只是读取数据,你应该没问题:
class HouseGoogleSerializer(HouseSerializer):
houseInfo = serializers.SerializerMethodField('get_house_info')
class Meta:
model = House
fields = [...]
def get_house_info(self, obj):
return {'title': obj.name}
Run Code Online (Sandbox Code Playgroud)
HouseSerializer您的基本房屋序列化器在哪里.
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |