Отношение ManytoMany в Django?

У меня есть две модели

class Group(models.Model):
    ....

и

class User(models.Model):
...
group = models.ManyToManyField(
    Group)

имеют отношения ManyToMany

Какой лучший способ предотвратить удаление Group экземпляра, если есть некоторые Users с этим Group

мое решение:

def delete(self, request, *args, **kwargs):
        try:
            list_ = []
            
            for user in User.objects.all():
                for group in user.group.all():
                    if group.name not in list_:
                        list_.append(group.name)
                    else:
                        continue
                       
            if Group.objects.get(pk=kwargs['pk']).name in list_:
                return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
            else:
                return self.destroy(request, *args, **kwargs)
        except:
            raise ValueError("Error")

Надеюсь, есть гораздо лучшее решение.

Вы можете проверить, получил ли Group хотя бы одного пользователя с помощью:

def delete(self, request, *args, **kwargs):
    items, __ = Group.objects.filter(pk=selk.kwargs['pk'], user=None).delete()
    if items:
        return Response(status=status.HTTP_200_OK)
    else:
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)

Это отфильтрует и переобучит только те Group, которые пусты. Если n таким образом 0, то он примет случай else и вернет 405. Если n больше нуля (в данном конкретном случае это всегда будет единица), то он удалит эту запись Group и вернет ответ HTTP 200.

Вернуться на верх