Отношение 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.