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