2015-11-02 146 views
2

我遇到序列化问题。我有一个对象的查询集例如:Django Rest框架使用动态字段序列化

uvs = UserVehicles.objects.all() 

其中一些对象已过期,有些不是。我想在序列化程序中有不同的字段,具体取决于到期信息。例如,我想从过期对象中排除status和distance_travelled字段。什么是最简单的方法来实现呢?我尝试了下一个代码,但init方法中的self.object包含一个数组,所以它将删除所有对象的字段,而不仅仅是过期的字段。

serialized_data = UserVehicleSerializer(uvs, many=True).data 

class UserVehicleSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = UserVehicle 
     fields = ('type', 'model', 'status', 'distance_travelled',) 

    def __init__(self, *args, **kwargs): 
     super(UserVehicleSerializer, self).__init__(*args, **kwargs) 

     if self.object.is_expired: 
      restricted = set(('distance_travelled', 'status',)) 
      for field_name in restricted: 
       self.fields.pop(field_name) 

回答

0

我会建议保持业务逻辑出串行器。您可以为过期的车辆/对象创建单独的序列化程序,为活动车辆创建单独的序列化程序,并在视图中选择正确的序列化程序。这样,如果您的业务逻辑针对每种类型的车辆走向不同的方向,应该很容易管理。

相关问题