Django 中的多对多关系?

ManytoMany relation in Django?

我有两个模型

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

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

具有多对多关系。

如果这个 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']<strong>, user=None</strong>).delete()
    if items:
        return Response(status=status.HTTP_200_OK)
    else:
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)

这将过滤并仅重新训练 Group 个空的。如果 n 因此是 0 那么它将采用 else 的情况,并且 return 是 405。如果 n 大于零(在这种特定情况下它永远是一个),然后它将删除该 Group 记录和 return HTTP 200 响应。