2017-07-08 33 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

相關問題