我正在使用 django、backbone.js、tastepie 和 mongodb 开发一个 Web 应用程序。为了使tastepie和django适应mongodb,我使用了django-mongodb-engine和tastepie-nonrel。这个应用程序有一个模型项目,它有一个任务列表。所以它看起来像这样:
class Project(models.Model):
user = models.ForeignKey(User)
tasks = ListField(EmbeddedModelField('Task'), null=True, blank=True)
class Task(models.Model):
title = models.CharField(max_length=200)
感谢tastepie-nonrel,通过/api/v1/project/:id:/tasks/的GET请求以简单的方式获取项目的任务列表
现在我想用一个评论列表来扩展这个任务模型:
class Task(models.Model):
title = models.CharField(max_length=200)
comments = ListField(EmbeddedModelField('Comment'), null=True, blank=True)
class Comment(models.Model):
text = models.CharField(max_length=1000)
owner = models.ForeignKey(User)
这个实现的问题是tastepie-nonrel不支持另一个嵌套,所以不可能简单地向/api/v1/project/:id:/task/:id:/comments/发表评论
另一种方法是只向 /api/v1/project/:id:/task/ 发出一个任务的 PUT 请求,但是如果两个用户决定同时向同一个任务添加评论,这会产生问题,因为最后一个 PUT 将覆盖前一个。
最后一个选项(除了更改tastepie-nonrel)是不将Comment 嵌入Task 中而只保留ForeignKey,因此请求将转到/api/v1/Comment/。我的问题是这是否破坏了使用 MongoDB 的好处(因为它需要交叉查询)?有没有更好的方法呢?
我对堆栈的任何技术都没有什么经验,所以可能是我没有很好地关注这个问题。欢迎任何建议。