jjzjj

Django,mongodb,Tastypie-nonrel : List of ForeignKey

coder 2023-10-31 原文

在我的 Django-mongodb 模型上,我想要一个对象,它的 listField 包含对其他对象的引用。这是我想要实现的示例:

模型.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”包含引用“评论”对象的“对象 ID”列表。如果什么都不做,我的“发布”资源上的 HTTP GET 将给我:

[...],
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/"
}
]

我的问题是:如何解析对对象 Comment 的引用,并通过对资源 Post 的 API 调用使其可用?

如果这不可能,那么设计我的非关系数据模型的最佳方式是什么,以便一个帖子可以包含多个评论,但是那个评论是否可以单独访问并独立更新?

非常感谢您的帮助!

最佳答案

尝试像这样自定义 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

关于Django,mongodb,Tastypie-nonrel : List of ForeignKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9434823/

有关Django,mongodb,Tastypie-nonrel : List of ForeignKey的更多相关文章

  1. ruby-on-rails - 在 Ruby on Rails 中验证 Django 密码给出不匹配的密码 - 2

    我正在用RubyonRails重写Django应用程序,并希望为用户保留旧密码。Django使用PBKDF2SHA1作为加密机制。所以我有一个加密密码是这个pbkdf2_sha256$10000$YsnGfP4rZ1IZ$Tpf4922MoNEjuJQA9EG2Elptyt3dMAyzBPUgmunFOW4=原密码是2bulls在Ruby中,我使用PBKDF256gem和base64进行检查。Base64.encode64PBKDF256.dk("2bulls","YsnGfP4rZ1IZ",10000,32)我很期待Tpf4922MoNEjuJQA9EG2Elptyt3dMAyzBP

  2. 基于python的短视频智能推荐/django的影视网站/视频推荐系统 - 2

    摘要本论文主要论述了如何使用Python技术开发一个短视频智能推荐,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述短视频智能推荐的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。 短视频智能推荐的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、热门视频管理、用户上传管理、系统管理,用户:首页、个人中心、用户上传管理、我的收藏管理,前台首页;首页、热门视频、用户上传、公告信息、个人中心、后台管理等功能。由于本网站的功能模块设计比较全面,所以使得整个短视频智能推荐信

  3. ruby - Sinatra Web 管理员(如 Django 管理员) - 2

    有没有办法为Sinatra获取DjangoAdmin风格的网络管理员? 最佳答案 没用过,但通过谷歌很快就显示出来了:http://www.padrinorb.com/ 关于ruby-SinatraWeb管理员(如Django管理员),我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2855494/

  4. ruby-on-rails - 在一个 Rails 应用程序中使用 PostgreSQL 的 MongoDB - 2

    我可以在一个Rails应用程序中同时使用MongoDB和PostgreSQL吗?具体来说,我最终会想要使用像MongoHQ这样的东西。到目前为止,我未能在实验中进行这项工作。令我担心的是,MongoDB文档特别指出我必须禁用ActiveRecord。任何建议将不胜感激。 最佳答案 您无需禁用ActiveRecord即可使用MongoDB。查看Mongoid只需将gem加上任何模型与您现有的任何ActiveRecord模型一起添加。您应该注意到MongoHQ只是MongoDB的托管服务,可以与任何对象文档映射器(ODM)一起使用。更多

  5. ruby - 使用 mongodb/mongoid 运行时更改模型 - 2

    我必须在mongoid模型中添加几个字段,我知道MongoDB没有迁移,但如果我继续而不删除数据库,使rails完全“重新生成”数据库,它不会显示或使用新的领域!去这里最好的方法是什么?有比删除/重新打开mongodb更软的东西吗?提前致谢卢卡 最佳答案 一般来说,应该可以在运行时用新字段更新旧文档。MongoDB中不需要迁移。您可能想编写rake任务以使用新字段和默认值更新旧文档。您可以通过检查那些默认值为nil的新字段来找到这些文档。更新简单风格:如果您使用默认值定义一个新字段,只要您设置了一个新值,就应该始终使用该值:应用程序

  6. ruby-on-rails - 我如何从 Ruby 代码连接到 mongodb? - 2

    我如何从Ruby代码连接到mongodb? 最佳答案 首先,您必须安装MongoDbgem:geminstallmongo然后运行代码:require'rubygems'#notnecessaryforRuby1.9require'mongo'db=Mongo::Connection.new.db("mydb")#ORdb=Mongo::Connection.new("localhost").db("mydb")#ORdb=Mongo::Connection.new("localhost",27017).db("mydb")

  7. ruby - MongoDB:无法从 BSON 类型 EOO 转换为 Date - 2

    我正在尝试使用聚合框架(使用ruby​​)并像这样投影日期:db['requests'].aggregate([{"$project"=>{_id:0,method:'$method',user:'$user',year:{'$year'=>'$timestamp'}}}])文档是这样的:{_id:ObjectId("5177d7d7df26358289da7dfd"),timestamp:ISODate("2013-04-12T03:58:05+00:00"),method:"POST",status:"200",inputsize:"874",outputsize:"4981",u

  8. ruby - 在 Ruby 中从 MongoDB 中检索字段的子集 - 2

    我试图通过在Ruby中进行的查询从MongoDB获取字段的子集,但它似乎不起作用。它不返回任何结果这是ruby代码:coll.find("title"=>'Halo',:fields=>["title","isrc"])#thisdoesn'twork如果我删除字段散列,它会工作,返回包含所有字段的结果coll.find("title"=>'Halo')#thisworks查看mongodb控制台,第一个查询在mongodb服务器上结束,如下所示:{title:"Halo",fields:["title","isrc"]}如果我尝试从mongo客户端控制台进行查询,它会工作,我会得到结

  9. ruby - 使用类似 django 的液体 block /继承的 Jekyll 模板 - 2

    我正在深入了解Jekyll,并希望将其用作通用前端开发平台,但遇到了Liquid模板语言的局限性,特别是它与Django模板的区别。我发现了liquid-inheritancegem,它添加了Django中最重要的Extends和Block语法。这篇博文进一步扩展了gem以适应Jekyll的文件系统:http://www.sameratiani.com/2011/10/22/get-jekyll-working-with-liquid-inheritance.html问题是它似乎没有以与Django完全相同的方式实现block,这实际上使gem变得无用。为了便于理解,我有两个名为par

  10. ruby-on-rails - Rails 替代 Django 管理面板/CRUD View 生成器? - 2

    我目前正在尝试在Rails和Django之间做出决定。目前我发现ruby​​更优雅,所以我考虑Django的唯一原因是管理面板..我没有任何经验,但我必须在截止日期前快速开发应用程序。Rails中是否有一种方法可以根据您的模型(如django中的管理面板)为您的所有CRUD操作生成一组(接近生产就绪的)View?(即它会查看您的模型并看到您有一个属于某个组的人,并在创建人员View上为该组生成一个下拉列表)?如果不是,那是获得所有CRUDView初稿的最快方法(无需手动编写)?谢谢,丹尼尔 最佳答案 有趣的工具http://acti

随机推荐