【问题标题】:Django Rest Framework - Append JSON to Model SerializationDjango Rest Framework - 将 JSON 附加到模型序列化
【发布时间】:2016-05-06 05:42:35
【问题描述】:

我有一个非常简单的模型,我在模型上创建了一个属性,基本上将子数据作为 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 添加到序列化器中,而不是像

这样的字符串
{
    "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 附加到模型的序列化而不将它作为字符串返回。

【问题讨论】:

  • 这个帮助?你可以称它为 JSONField 吗? stackoverflow.com/questions/22434869/…
  • 这让我沿着将 JSONField 添加到模型中的路径,该模型将根据需要进行设置,然后在模型序列化中完成。有道理,我将这样做以摆脱困境,但我仍然想了解根据需要附加 JSON,因为这将是一个非常方便/需要的输出。

标签: python django django-rest-framework


【解决方案1】:

您不应该将方法的结果转储到 JSON。只需返回字典; DRF 的序列化程序会负责转换它。

【讨论】:

  • 谢谢,我可能在不久的将来需要这个!
  • 删除 JSON 转储是正确的,现在无需使用 JSONField 属性感染相关模型。干杯。
猜你喜欢
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
  • 2018-09-10
  • 1970-01-01
  • 2021-04-29
  • 2015-02-19
相关资源
最近更新 更多