在django tastypie中,向一对多关系添加一个项目仅在第二次生效

在django tastypie中,向一对多关系添加一个项目仅在第二次生效,django,tastypie,Django,Tastypie,鉴于这些模型: class ModelA(models.Model): # Some fields # Some relationship class ModelB(models.Model): # Some fields a = models.ForeignKey(ModelA) 还有这些tastypie资源: class ResourceA(ModelResource): b_list = fields.ToManyField('app.api.R

鉴于这些模型:

class ModelA(models.Model):
    # Some fields
    # Some relationship

class ModelB(models.Model):
    # Some fields
    a = models.ForeignKey(ModelA)
还有这些tastypie资源:

class ResourceA(ModelResource):
    b_list = fields.ToManyField('app.api.ResourceB', 'a_set', null=True, related_name='a')

class ResourceB(ModelResource):
    a = fields.ToOneField(ResourceA, 'a', null=True)
如果我访问ResourceB(/api/v1/resourceA/####/)的详细端点,我可以看到所有相关B的URI—反向关系可以工作。返回的数据如下所示:

{
    'b_list': [
        '/api/v1/resourceB/1/',
        '/api/v1/resourceB/2/',
    ]
}
如果我试图放置或修补资源a以向其添加新的B,请使用以下数据:

{
    'b_list': [
        '/api/v1/resourceB/1/',
        '/api/v1/resourceB/2/',
        '/api/v1/resourceB/3/',
    ]
}
我发现错误:
“ManyRelatedManager”对象没有此stacktrace的属性“add”

Traceback (most recent call last):

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 202, in wrapper
    response = callback(request, *args, **kwargs)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 449, in dispatch_detail
    return self.dispatch('detail', request, **kwargs)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 472, in dispatch
    response = method(request, **kwargs)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 1611, in patch_detail
    self.update_in_place(request, bundle, deserialized)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 1634, in update_in_place
    return self.obj_update(bundle=original_bundle, **kwargs)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 2166, in obj_update
    return self.save(bundle, skip_errors=skip_errors)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 2257, in save
    self.save_m2m(m2m_bundle)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 2382, in save_m2m
    related_resource.save(updated_related_bundle)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 2257, in save
    self.save_m2m(m2m_bundle)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 2382, in save_m2m
    related_resource.save(updated_related_bundle)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 2257, in save
    self.save_m2m(m2m_bundle)

  File \"/home/username/.virtualenvs/myapp/local/lib/python2.7/site-packages/tastypie/resources.py\", line 2385, in save_m2m
    related_mngr.add(*related_objs)

AttributeError: 'ManyRelatedManager' object has no attribute 'add'
如果随后立即放置/修补相同的数据,则不会出现错误,也不会出现stacktrace,并且该项已成功添加到关系中。我不明白为什么会这样


而且,我似乎只能在关系中添加项目——如果能够删除它们,那就太好了。我可能会问另一个问题。

好的。这是一个Django错误。 我不确定,尝试在django模型中使用相关的名称

class ModelB(models.Model):
# Some fields
a = models.ForeignKey(ModelA, related_name='b_list')
从资源中删除相关的_名称,并且属性名称必须从“a_集”更改为“b_列表”

class ResourceA(ModelResource):
b_list = fields.ToManyField('app.api.ResourceB', 'b_list', null=True)