2012-02-24 3 views
3

На моей модели Django-mongodb я хотел бы иметь объект со списком, содержащий ссылку на другие объекты. Вот пример того, что я хочу добиться:Django, mongodb, Tastypie-nonrel: Список ForeignKey

models.py

class Comment(models.Model): 
    title = models.CharField(max_length=50) 
    body = models.CharField(max_length=50) 

class Post(models.Model): 
    name = models.CharField(max_length=50) 
    commentList = ListField(models.ForeignKey(Comment)) 

api.py (Tastypie Ресурсы)

class CommentResource(MongoResource):  
    class Meta: 
     object_class = Comment 
     queryset = Comment.objects.all() 
     resource_name = 'comment' 
     authentication = Authentication() 
     authorization = Authorization() 

class PostResource(MongoResource): 
    commentList = ListField(models.ForeignKey('CommentResource', 'commentList') #Wrong but just the expression of my incomprehension. 
    class Meta: 
     object_class = Post 
     queryset = Post.objects.all() 
     resource_name = 'post' 
     authentication = Authentication() 
     authorization = Authorization() 

В этом примере поле "commentList" содержит список «Идентификатор объекта», ссылающийся на объекты «Комментарий». Если ничего не будет сделано, HTTP-GET на мой ресурс «Post» даст мне:

[...], 
objects: [ 
{ 
id: "4f47b159c789550388000000", 
name: "Hello World", 
commentList: "[u'4f47b14ec789550387000000']", 
resource_uri: "/api/v1/post/4f47b159c789550388000000/" 
} 
] 

То, что я хотел бы получить это:

[...], 
objects: [ 
{ 
id: "4f47b159c789550388000000", 
name: "Hello World", 
commentList: 
[ 
    comment:{ 
     title : "My comment title", 
     body : "It would be great if tastypie-nonrel could do this!", 
     resource_uri: "/api/v1/comment/454f4v59c789550388051486/" 
    } 
], 
resource_uri: "/api/v1/post/4f47b159c789550388000000/" 
} 
] 

Мой вопрос: Как я могу разрешить ссылка на объекты Комментарий и сделать его доступным с вызовом API для источника rss Сообщение?

Если это не представляется возможным, что было бы лучшим способом создать мою нереляционную модель данных таким образом, чтобы сообщение может содержать несколько комментарий, но Комментарий Ало можно получить самостоятельно и обновляется самостоятельно?

Большое спасибо за помощь!

ответ

1

Попробуйте настроить обезвоживают функцию PostResource так:

class PostResource(MongoResource): 
    commentList = ListField(models.ForeignKey('CommentResource', 'commentList') 
    class Meta: 
     object_class = Post 
     queryset = Post.objects.all() 
     resource_name = 'post' 
     authentication = Authentication() 
     authorization = Authorization() 

    def dehydrate(self, bundle): 
     cmt_res = CommentResource() 
     cmt_bundles = [cmt_res.build_bundle(c) for c in bundle.obj.commentList] 
     for cb in cmt_bundles: 
      cmt_res.full_dehydrate(cb) 
     bundle.data['commentList'] = cmb_bundles