0

我正在开发一个应用程序的后端,并编写一个函数来从多个表中检索数据,然后从中构造一个 httpresponse。

我想做的是获得一种疫苗,然后是该疫苗的所有疾病,然后构建包含所有内容的东西(对象,列表,字典,...)。

到目前为止,我得到的是:

def vaccinepack(request, country_id):
    vaccines = Vaccine.objects.filter(diseases__countries__id=country_id)
    diseases = []
    json = serializers.get_serializer("json")()
    response = HttpResponse()
    for v in vaccines:
        dis = Disease.objects.filter(vaccine=v.id)
        disdata = ""
        for d in dis:
            disdata += json.serialize([d], ensure_ascii=False)
        json.serialize([v, disdata], ensure_ascii=False, stream=response)
    return response

但是我在序列化 [v, disdata] 时遇到了麻烦。

'list' object has no attribute '_meta'. 

我对 Django 很陌生,所以我不确定这样做的正确方法是什么。

这是我的模型:

class Disease(models.Model):
    name = models.CharField(max_length=100)
    text = models.CharField(max_length=2000)
    countries = models.ManyToManyField(Country, blank=True)
    def __unicode__(self):
        return self.name

class Vaccine(models.Model):
    name = models.CharField(max_length=100)
    text = models.CharField(max_length=2000)
    diseases = models.ManyToManyField(Disease, blank=True)
    def __unicode__(self):
        return self.name
4

1 回答 1

2

您的错误消息的直接原因是因为您将一个列表对象传递给 Django 序列化程序,但它需要一个 QuerySet。

我要做的是将数据结构构建为一系列嵌套的 Python 字典,然后在最后将其全部转换为 JSON json.dumps()。(请注意,这是实际的内置json库,您已使用序列化程序对其进行了隐藏。)类似于(未经测试):

serializer = serializers.get_serializer('python')
vaccine_list = serializer.serialize(vaccines)
for i, v in enumerate(vaccines):
    diseases = v.diseases.all()
    disease_list = serializer.serialize(diseases)
    vaccine_list[i]['fields']['diseases'] = disease_list
data = json.dumps(vaccine_list)
于 2013-01-02T13:30:12.650 回答