2015-11-07 5 views
0

Je suis en train d'utiliser django non rel avec tastypie et MongoDB .J'ai un modèle qui embarquent la liste d'un autre objet de modèle, mais quand je l'interroger EmbeddedModel vient comme çaDjango non rel tastypie mongodb embeddedmodel decode

article: objet item

Je tente de décoder le même, mais incapable de le faire.

Voici la sortie:

{"meta": {"limit": 20, "next": null, "offset": 0, "previous": null, "total_count": 1}, "objects": [{"postItem": "[<Item: Item object>, <Item: Item object>]", "title": "sdfdf"}]} 

models.py

from django.db import models 

from djangotoolbox.fields import ListField,EmbeddedModelField 

class Item(models.Model): 
    itemType=models.CharField(max_length=1,null=False) 
    content=models.TextField() 
class Post(models.Model): 
    title = models.CharField(max_length=100,null=False) 
    postItem=ListField(EmbeddedModelField('Item')) 

api.py

from django.conf import settings 
from django.contrib.auth.models import User 

from tastypie import fields 
from tastypie.bundle import Bundle 
from django.db import models 


class ScreenFeed(ModelResource): 
    class Meta: 
     queryset=Post.objects.all() 
     resource_name='post' 
     fields=["title","postItem"] 
     include_resource_uri=False 

J'ai le document comme ci-dessous dans mon mongodb base de données:

{ 
    "_id" : ObjectId("563dc4b808fcd877fb057ba6"), 
    "postItem" : [ 
     { 
      "content" : "sdfdsf", 
      "itemType" : "S" 
     }, 
     { 
      "content" : "fdsfdsfd", 
      "itemType" : "T" 
     } 
    ], 
    "title" : "sdfdf" 
} 

quelqu'un peut-il s'il vous plaît me suggérer comment puis-je décoder les données de mon modèle inclus dans le résultat JSON Son été 3 jours et je ne peux pas le résoudre par moi-même si la recherche d'un peu d'aide?.

+0

Que voulez-vous dire lorsque vous interrogez cela? Quelle est la sortie lorsque vous appelez le point de terminaison API? –

+0

@ dan-Klasson au lieu de JSON string.m sérialisé obtenir un objet de classe dans la sortie –

+1

je prends la ListField est spécifique à MongoDB. Si vous savez comment convertir l'objet d'une liste que vous pouvez le faire dans la méthode 'dehydrate': http://django-tastypie.readthedocs.org/en/latest/resources.html#id2 –

Répondre

0

Juste pour un avenir help.I je réponds à mon question.By en utilisant la méthode déshydrater je l'ai résolu.

def dehydrate_postItem(self,bundle): 
    results=list() 
    for i in xrange(len(bundle.obj.postItem)): 
     dictn={} 
     dictn['itemType']=bundle.obj.postItem[i].itemType 
     dictn['content']=bundle.obj.postItem[i].content 
     results.append(dictn) 
    return results 

Maintenant, je reçois la sortie désirée :)

{"meta": {"limit": 20, "next": null, "offset": 0, "previous": null, "total_count": 1}, "objects": [{"postItem": [{"content": "sdfdsf", "itemType": "S"}, {"content": "fdsfdsfd", "itemType": "T"}], "title": "sdfdf"}]}