0
我创建了这个简单的项目来说明我的问题。Django-piston:返回查询集和列表之间的区别?
这是我的模型:
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"
}
]
我失去了讲方法的结果,但获得了关系id和_state对象。任何人都可以解释为什么发生这种情况,我怎么能够防止它?这只是一个测试项目,我不想让任何人试图解释我的真实项目。
问题是我依赖于真实代码中的抽象模型。模型类型受到url的影响。例如/api/animals.cat/1或/api/animals.zoo/1 etc .... – Pickels 2011-03-16 10:51:11
然后,您将需要为每个具体模型定义一个处理程序,不幸的是。您应该可以定义一次,然后为每个模型进行子类化。 – 2011-03-16 17:53:21
废话,非常感谢您花时间回答我的问题。 – Pickels 2011-03-16 18:30:48