我有两个模型

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

这将过滤并仅重新训练空的Group个.如果n0,那么它将接受else,并返回405.如果n大于零(在这种特定情况下,它将始终为一),那么它将删除Group条记录并返回HTTP 200响应.

Django相关问答推荐

使用序列化器获取Django ORM auth_user. id数据

Django Admin中显示的DateField下面的小提示是什么?

如何在Django表单中传递self.请求数据?

覆盖保存以创建范围的多个对象()

SQLite上可以正常使用Many2Many链接注释,但MariaDB上无法正常使用(生产环境)

无法使用 django-filters 进行过滤

使用基于类的 UpdateView 在 Django 中更新用户模型

AttributeError:'Manager'对象在Django中没有属性'get_by_natural_key'错误?

Django 模型将外键设置为另一个模型的字段

在 Django 管理员中嵌套内联?

Django - 如何从模型中 Select 特定列?

可以在 Django 抽象模型中使用多重继承吗?

Django 默认=timezone.now + delta

如何使 Django 表单字段仅包含字母数字字符

Django:在还原(迁移)后try 访问数据库时权限被拒绝

如何使 Django 的开发服务器公开?

Python/Django - 避免在源代码中保存密码

Django 将多个模型传递给一个模板

它是如何工作的,Django INSTALLED_APPS 的命名约定?

我将如何package打包和销售 Django 应用程序?