如何让我的序列化程序处理多个rec,而不为其中包含数据的字段值返回“None”

时间:2015-01-25 01:29:42

标签: django django-rest-framework

我的模型序列化程序目前正在返回'无'在每个字段中检索两个记录,尽管表中的那些字段中有数据。我无法确定如何正确调用它。

以下是模型:

class Form(models.Model):
    name = models.CharField(max_length=255, null=True, blank=True)
    header = models.CharField(max_length=255, null=True, blank=True)
    body = models.CharField(max_length=255, null=True, blank=True)
    submit_button_label = models.CharField(max_length=255, null=True, blank=True)

    edited = models.DateTimeField(auto_now=True, auto_now_add=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return unicode(self.name)

这是我的序列化程序定义:

class FormSerializer(DefaultSerializer):
    class Meta:
        model = page_builder_models.Form

以下代码可行,但似乎就像最好的做事方式:

pf_qs = p.form.all().values()

form_list = []
for i in pf_qs:
    temp_dict = dict()
    temp_dict = page_builder_serializers.FormSerializer(page_builder_models.Form.objects.get(pk=i['form_id'])).data
    form_list.append(temp_dict)

print(form_list)

这是print语句返回的数据:

[{u'id': 1, 'name': u'test_form', 'header': u'Test Form Header', 
'body': u'This is just some test text for the Form Body field', 
'submit_button_label': u'Submit it!', 
'edited': datetime.datetime(2015, 1, 22, 7, 50, 22), 
'created': datetime.datetime(2015, 1, 22, 7, 50, 24)}, 

{u'id': 2, 'name': u'another_test_form', 'header': u'Second Test Form', 
'body': u'blah blah blah', 'submit_button_label': u'Faggetaboutit', 
'edited': datetime.datetime(2015, 1, 24, 4, 35, 20), 
'created': datetime.datetime(2015, 1, 24, 4, 35, 24)}]

这是我尝试开始工作的代码:

try:  # a Page can have multiple Form recs
    forms = page_builder_serializers.FormSerializer(pf_qs, many=True).data
except page_builder_models.Form.DoesNotExist:
    return rest_response.Response(data={'error': "form record cannot be found"}, status=404)

这是从终端打印出来的:

[{u'id': 1, 'name': None, 'header': None, 'body': None, 
'submit_button_label': None, 'edited': None, 'created': None}, 

{u'id': 2, 'name': None, 'header': None, 'body': None, 
'submit_button_label': None, 'edited': None, 'created': None}]

非常感谢任何和所有帮助/建议。

1 个答案:

答案 0 :(得分:0)

您需要在is_valid()属性具有值之前致电.data

否则值确实为None