2

我正在为我的项目使用 Tastypie,Django。为了更新多对多字段,我使用了 save_m2m 钩子。

def save_m2m(self, bundle):
      for field_name, field_object in self.fields.items():
        if not getattr(field_object, 'is_m2m', False):
            continue

        if not field_object.attribute:
            continue

        if field_object.readonly:
            continue

        related_mngr = getattr(bundle.obj, field_object.attribute)
        related_objs = []
        print bundle.data[field_name]
        for related_bundle in bundle.data[field_name]:
          try:
            stock = Stock.objects.get(nse_symbol = related_bundle.obj.nse_symbol)
            print stock.__dict__
          except Stock.DoesNotExist as e:
            dataa = {"error_message": e}
            raise ImmediateHttpResponse(response=HttpBadRequest(content=json.dumps(dataa), content_type="application/json; charset=UTF-8"))
          related_objs.append(stock)
        related_mngr.add(*related_objs)

现在我想从同一个多对多字段中删除元素。

我应该如何实现这一点。我是否必须发送补丁请求或删除请求以及如何处理。

我是美味派的初学者。我用谷歌搜索了一段时间,但找不到合适的方法。请指导我如何完成此操作。

谢谢。

4

1 回答 1

1

关于处理 m2m 关系,我想了很多,因为我们的大多数应用程序都依赖于 m2m 链接。

我已经决定采用一种update方法。传入您要更改的关系的所有引用(添加和删除),然后相应地更新数据库。我们只传递更改后的值,因为如果您有一个分页列表,您只想更新用户已识别的项目。通常我使用一个自定义钩子来定义这个在override_urls.

我曾经有一个单独的添加和删除方法,在我们更改 gui 并允许用户简单地更改复选框之前效果很好。在那种方法中,有一种update方法更有用。您必须决定哪种方法最适合您的应用程序。

于 2013-06-17T03:50:41.463 回答