2017-07-08 27 views
0

可以说我有车型像这样:如何自定义django模型对象的嵌套序列化列表,使其成为键/值对?

class Device(models.Model): 
    name = models.CharField(max_length=100,null=True) 
    model = models.CharField(max_length=100,null=True) 
    lab = models.ForeignKey(Lab,null=True, related_name='devices') 

class Lab(models.Model): 
    name = models.CharField(max_length=100) 

当一个实验室可以有多个设备。 当我创建串行我能够得到的东西回来这样的:

{'name':'My Lab','devices':[{'name':'Device 1','model':'iPhone'},{'name':'Device 2','model':'iPad'}]} 

不过,我想回去是键/值对,而不是设备的列表,像这样:

{'name':'My Lab','devices':{'Device 1':{'model':'iPhone'},'Device 2':{'model':'iPad'}}} 

我在想像我必须使用SerializerMethodField来完成这项工作,但是我很难解决这个问题。

回答

1

好的,有时只是写出问题,帮助我的大脑找出答案。

这是我想出了:

class LabSerializer(serializers.ModelSerializer): 
    devices = serializers.SerializerMethodField() 

    class Meta: 
     """Meta class to map serializer's fields with the model fields.""" 
     model = Lab 
     fields = ('name','devices') 

    def get_devices(self, obj): 
     devices = {} 
     for d in Device.objects.filter(lab = obj): 
      serializer = DeviceSerializer(d) 
      devices[d.name] = serializer.data 
     return devices 
+0

我想,这就是去了解它的最佳方式。我质疑这个用例,但如果这是你需要的,那么这就是它的方法。 –

+0

谢谢。就使用情况而言,我无法在O(1)时间内从实验室获取任何设备的信息。 – user2301357

相关问题