【发布时间】: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