Py学习  »  Django

Django Rest框架:裸m2m关系视图(Set)(不嵌套)

Jurgis Pralgauskis • 4 年前 • 131 次点击  

假设我们有标准的auth.contrib users <<-->> groups 关系。 我有 User Group 实例已创建,并希望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?

dillema是m2m关系是对称的,我希望有一个端点(不那么含糊不清)。。 如何解决 GET list for user GET lsit for group ? 我认为使用查询参数(因为它们没有绑定到url结构,所以它们的顺序并不重要):

所以端点url将是 /groups_x_users

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

  • 投入 /组用户 {组:“g1”,用户:“u2”}或空的有效载荷 /群组用户?组=g1&user=u2 ?

  • 删除 /群组用户?组=g1&user=u2 @移动通信 对于非安全方法,应双重检查参数选择单一关系(类似于 drf-bulk package ). 我还是有疑问,如果没有关系怎么处理删除——也许只是默默地过去(如放)?

通过扩展ModelViewSet并重写 get_object get_queryset (或 filter_queryset ) 但我在网上找不到这样的解决方案(通过query param)——所以 使用查询参数的缺点是什么? (搜索引擎优化?).

注:我发现的大多数DRF示例都建议通过嵌套序列化器来实现——但这看起来太笨拙了。我只想显式地编辑关系——并且按照单个关系(为了更清楚地(in)验证处理)进行编辑。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49404
 
131 次点击