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.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 に答える