Django Rest Framework: голое m2m отношение View (Set) (без вложенности) - PullRequest
0 голосов
/ 27 февраля 2019

Допустим, у нас стандартное отношение 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 я нашел: Как обрабатывать отношения «многие ко многим» в RESTful API?

Дилемма заключается в том, что отношение m2m является симметричным, и я хочу иметь одну конечную точку (будетбыть менее двусмысленным) .. Как решить это для GET list for user против GET lsit for group?Я думаю, чтобы пойти с параметрами запроса (так как они не связаны со структурой URL, их порядок не важен):

Таким образом, URL конечной точки будет просто /groups_x_users

  • GETэлемент /groups_x_users?group=g1&user=u2 # список с одним элементом - или приведение к элементу
  • список GET для u1 /groups_x_users?user=u2
  • список GET для g3 /groups_x_users?group=g1
  • ПОЛУЧИТЬ список для всех комбинаций /groups_x_users

  • PUT /groups_x_users {группа: "g1", пользователь: "u2"} # или, возможно, пустая полезная нагрузка до /groups_x_users?group=g1&user=u2?

  • DELETE /groups_x_users?group=g1&user=u2 @ m.com Для небезопасных методов следует дважды проверить, что параметры выбирают одно отношение (аналогично пакету drf-bulk ).У меня все еще есть сомнения, как обращаться с DELETE, если отношения отсутствуют - может быть, просто передать молча (как с PUT)?

ViewSet кажется возможным путем расширения ModelViewSet и переопределения get_object и get_queryset (или filter_queryset).Но я не могу найти такое решение (с помощью параметра запроса) в Интернете - так что в чем могут быть недостатки использования query_params? (SEO?).

PS .: Большинство примеров DRFЯ нашел предложение сделать это через вложенный сериализатор - но это кажется слишком неуклюжим.Я хочу явно редактировать ТОЛЬКО отношения - и делать это для одного отношения (для более четкой (не) обработки проверки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...