私は自分の問題を説明するためにこの簡単なプロジェクトを作成しました。
これらは私のモデルです:
class Zoo(models.Model):
name = models.CharField(max_length=30)
class Animal(models.Model):
name = models.CharField(max_length=30)
zoo = models.ForeignKey(Zoo)
def speak(zelf):
return 'woof woof'
これは私のベースハンドラーです:
class ZooHandler(BaseHandler):
fields = ('id', 'name', 'speak')
def read(self, request):
z = Zoo.objects.get(pk=1)
qs = z.animal_set.all()
return qs
これは、クエリセットをリストに変換しない場合の結果です。
[
{
"id": 1,
"name": "Tiger",
"speak": "woof woof"
},
{
"id": 2,
"name": "Panda",
"speak": "woof woof"
},
{
"id": 3,
"name": "Bear",
"speak": "woof woof"
},
{
"id": 4,
"name": "Parrot",
"speak": "woof woof"
},
{
"id": 5,
"name": "Dolphin",
"speak": "woof woof"
}
]
これは、リストに変換するとどうなるかですreturn list(qs)
。
[
{
"zoo_id": 1,
"_state": "<django.db.models.base.ModelState object at 0x2413f90>",
"id": 1,
"name": "Tiger"
},
{
"zoo_id": 1,
"_state": "<django.db.models.base.ModelState object at 0x241d590>",
"id": 2,
"name": "Panda"
},
{
"zoo_id": 1,
"_state": "<django.db.models.base.ModelState object at 0x241d6d0>",
"id": 3,
"name": "Bear"
},
{
"zoo_id": 1,
"_state": "<django.db.models.base.ModelState object at 0x241d750>",
"id": 4,
"name": "Parrot"
},
{
"zoo_id": 1,
"_state": "<django.db.models.base.ModelState object at 0x241d7d0>",
"id": 5,
"name": "Dolphin"
}
]
私はspeakメソッドの結果を失いますが、リレーショナルIDと_stateオブジェクトを取得します。なぜこれが起こるのか、そしてどうすればそれを防ぐことができるのか誰かが説明できますか?これは、私の実際のプロジェクトを説明しようとする人を退屈させたくなかった単なるテストプロジェクトです。