Django Rest Framework:裸m2m关系View(Set)(无嵌套)

时间:2019-02-27 07:24:50

标签: django-rest-framework m2m

假设我们具有标准的auth.contrib users <<-->> groups关系。 我已经创建了UserGroup实例,并且想CRUD 仅关系

序列化器可能是这样的:

class Serializer(ModelSerializer):
    group = SlugRelatedField(slug_field='name', queryset=Group.objects.all())
    user = SlugRelatedField(slug_field='email', queryset=User.objects.all())
    class Meta:
        model = Group_x_User

我找到的最接近REST API的建议是:How to handle many-to-many relationships in a RESTful API?

难题在于,m2m关系是对称的,我希望具有单个端点(将减少歧义)。如何针对GET list for userGET lsit for group 来解决它?我认为可以使用查询参数(因为它们不绑定到url结构,所以它们的顺序并不重要):

因此,端点网址将仅为/groups_x_users

  • 获取包含一个项目的项目/groups_x_users?group=g1&user=u2#列表-或强制转换为项目
  • 获取u1 /groups_x_users?user=u2的列表
  • 获取g3 /groups_x_users?group=g1的列表
  • 获取所有组合/groups_x_users

  • 的列表
  • PUT /groups_x_users {group:“ g1”,user:“ u2”}#或可能是/groups_x_users?group=g1&user=u2的空有效载荷?

  • 删除/groups_x_users?group=g1&user=u2 @ m.com 对于不安全的方法,应再次检查该参数以选择单个关系(类似于drf-bulk package中的关系)。 我仍然有疑问,如果不存在关系该如何处理DELETE-也许只是默默地传递(与PUT一样)?

通过扩展ModelViewSet并覆盖get_objectget_queryset(或filter_queryset),似乎可以实现ViewSet。 但是我在Web上找不到这样的解决方案(通过查询参数),因此使用query_params可能有什么弊端?(SEO?)。

PS .:我发现的大多数DRF示例都建议通过嵌套序列化程序来完成,但这似乎太笨拙了。我想显式地编辑唯一的关系-并针对每个关系进行此操作(以进行更清晰的验证处理)。

0 个答案:

没有答案