簡體   English   中英

Django Rest Framework-將JSON附加到模型序列化

[英]Django Rest Framework - Append JSON to Model Serialization

我有一個非常簡單的模型,並且我已經在模型上創建了一個屬性,本質上將子數據作為JSON返回。 該屬性很簡單:

@property
def question_data(self):
    from api.models import TemplateQuestion
    questions = TemplateQuestion.objects.filter(template__id=self.template.id)
    question_dict = [obj.as_dict() for obj in questions]
    return(json.dumps(question_dict, separators=(',', ': ')))

哪個工作並輸出有效的JSON。 那就是說我完全不知道如何將該屬性作為JSON而不是像這樣的字符串添加到Serializer中

{
    "questions": "[{\"sequence\": 2,\"next_question\": \"\",\"modified_at\": \"2016-01-27T19:59:07.531872+00:00\",\"id\": \"7b64784e-a41d-4019-ba6e-ed8b31f99480\",\"validators\": []},{\"sequence\": 1,\"next_question\": null,\"modified_at\": \"2016-01-27T19:58:56.587856+00:00\",\"id\": \"99841d91-c459-45ff-9f92-4f75c904fe1e\",\"validators\": []}]"
}

它對JSON進行了分類,而我需要將其作為正確的JSON。

序列化器可能太基礎了,但是我有一段時間沒有使用DRF了,也從未嘗試將JSON附加到序列化的輸出中。

class BaseSerializer(serializers.ModelSerializer):

    class Meta:
        abstract = True

class SurveySerializer(BaseSerializer):
        included_serializers = {
            'landing_page': 'api.serializers.LandingPageSerializer',
            'trigger': 'api.serializers.TriggerSerializer',
            'template': 'api.serializers.TemplateSerializer'
        }

        questions = serializers.ReadOnlyField(source='question_data')

        class Meta:
            model = Survey
            fields = ('id',
                      'name',
                      'slug',
                      'template',
                      'landing_page',
                      'trigger',
                      'trigger_active',
                      'start_date',
                      'end_date',
                      'description',
                      'fatigue_limit',
                      'url',
                      'questions',)
            meta_fields = ('created_at', 'modified_at')

我要補充一點,我也正在使用Django Rest Framework JSON API格式,但是我認為最后我只是不了解如何將JSON附加到模型的序列化中,而不會將其作為字符串返回。

您不應該將方法的結果轉儲為JSON。 只需返回字典即可; DRF的串行器將負責對其進行轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM