python - 在一个 TastyPie API 请求中发布多个对象

标签 python django tastypie restful-url

如果可能的话,我想在单个发布请求中创建多个相关对象。我有一个包含多个游戏的应用程序,我想将每个游戏的应用程序事件发布到数据库。

模型中的每个事件对象都有一个游戏对象作为外键,因此我需要先创建游戏,然后才能创建事件对象。

{
     "game": {
         "name":"monte",
         "app":"/api/v1/app/1/"
      },

     "activity":{
         "type":"eggs",
         "score":"0.90",
         "game":"_INSERT_MONTE_RESOURCE_URI_HERE_"
      },

     "activity":{
         "type":"spam",
         "score":"1.00",
         "game":"_INSERT_MONTE_RESOURCE_URI_HERE_"
      }
}

是否有一种简单的方法可以做到这一点,或者我是否需要从我的应用程序发出 3 个发布请求?一个用于创建游戏,然后一个用于每个事件?

我想 PATCH 可能会起作用,但后来我意识到在发送补丁请求时我不知道要分配给每个事件的游戏资源 URI。我想我可以在一个请求中创建游戏,然后在补丁请求中创建事件,我只是希望可以在一批中完成所有这些。

最佳答案

为接受相关对象创建的字段使用相关名称

http://django-tastypie.readthedocs.org/en/v0.10.0/fields.html#tastypie.fields.RelatedField.related_name

相关字段.related_name

用于帮助在创建数据时自动填充反向关系。默认为无。

为了使此选项正常工作,其他资源上必须有一个字段将其作为属性/实例名称。通常这只是意味着添加一个指向后方的反射 ToOneField。

示例:

class EntryResource(ModelResource): authors = fields.ToManyField('path.to.api.resources.AuthorResource', 'author_set', related_name='entry')

    class Meta:
        queryset = Entry.objects.all()
        resource_name = 'entry'

class AuthorResource(ModelResource):
    entry = fields.ToOneField(EntryResource, 'entry')

class Meta:
    queryset = Author.objects.all()
    resource_name = 'author'

使用related_name 做任务。它映射相关字段的对象并在创建数据时自动填充关系。

关于python - 在一个 TastyPie API 请求中发布多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14950106/

相关文章:

django - tastypie 发布和完整示例

python - 复杂的 Django 查询集过滤,涉及 Q 对象和棘手的逻辑

python - 'ascii' 编解码器无法对位置 9 : ordinal not in range(128) 中的字符 u'\u2013' 进行编码

用于外键的 Django Tastypie apply_filter

python - 如何在 Tastypie 中声明子资源?

django - 所引用的交易不符合发放信用的标准

javascript - 特定字符串的 HTML 偶数异常

Python:Selenium 无法单击 XPath 文本元素

python - 实时 ECS 登录 Cloudwatch

python - 如果 OS Python 版本是 3.5,如何设置 pipenv Python 3.6 项目?