2016-04-28 68 views
1

我道歉,新的Django。我一直在搜索文档,一直没有找到答案。Django串行器显示模型字段作为字典

我有一个模型“富”,有一个字段“栏”,这是一个字典,我存储为JSON在TextField中。我想要一个GET请求来显示这个字段作为字典,但是当我发出请求时,字典显示为JSON格式的单个字符串。

总结我的代码:

型号:

class Foo(models.Model): 
    bar = models.TextField(blank=True, default="{}") 
    def getBar(self): 
     return json.loads(bar) 

串行器:

class FooSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Foo 
     fields = ("bar") 
     read_only_fields = ("bar") 
    def create(self, data): 
     return Foo.objects.create(**data) 

观点:

class FooList(generics.ListAPIView): 
    queryset = [] 
    for foo in Foo.objects.all(): 
     foo.bar = json.loads(foo.bar) 
     # Printing type of foo.bar here gives "type <dict>" 
     queryset.append(foo) 
    serializer_class = FooSerializer 

谢谢!

回答

1

您可以将SerializerMethodField添加到您的ModelSerializer类象下面这样:

class FooSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Foo 
     fields = ('bar',) 
     read_only_fields = ('bar',) # Not required, because 
            # SerializerMethodField is read-only already 

    bar = serializers.SerializerMethodField('get_bar_dict') 

    def get_bar_dict(self, obj): 
     return json.loads(obj.bar) # This gets the dict and returns it 
            # to the SerializerMethodField above 

    # Below is the rest of your code that I didn't touch 
    def create(self, data): 
     return Foo.objects.create(**data) 
+0

完美工作,感谢您的链接到文档! – Kieran