如何使ForeignKey('self')禁令的管理员引用其自身?

2023-12-13

我有一个模型,其自身带有外键。例如:

class Folder(models.Model):
    name = models.CharField()
    parent_folder = models.ForeignKey('self', null=True, blank=True, default=None, on_delete=models.CASCADE)

为了我的目的,我从来不想parent_folder引用自身,但该模型的默认管理界面确实允许用户选择自己的实例。我怎样才能阻止这种情况发生?

Edit:如果您像我一样尝试进行分层树布局,那么您需要注意的另一件事是循环父关系。 (例如,A 的父级是 B,B 的父级是 C,C 的父级是 A。)避免这种情况不是这个问题的一部分,但我想我会提到它作为提示。


我个人会在模型级别执行此操作,因此如果您以其他形式重用该模型,您也会收到错误:

class Folder(models.Model):
    name = models.CharField()
    parent_folder = models.ForeignKey('self', null=True, blank=True, default=None, on_delete=models.CASCADE)

    def clean(self):
        if self.parent_folder == self:
            raise ValidationError("A folder can't be its own parent")

如果您在表单中使用此模型,请使用查询集,以便模型本身不会出现:

class FolderForm(forms.ModelForm):

    class Meta:
        model = Folder
        fields = ('name','parent_folder')

    def __init__(self, *args, **kwargs):
        super(FolderForm, self).__init__(*args, **kwargs)
        if hasattr(self, 'instance') and hasattr(self.instance, 'id'):
            self.fields['parent_folder'].queryset = Folder.objects.exclude(id=self.instance.id)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使ForeignKey('self')禁令的管理员引用其自身? 的相关文章

随机推荐

  • RegEx 在 Powershell 中匹配两个字符串之间的字符串

    这是我的示例数据 选项失败不匹配选项批处理开启选项确认关闭打开 sftp 用户名 电子邮件受保护 22 主机密钥 ssh rsa 1024 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 获取
  • 如何比较和排序 2 个 csv 以显示差异

    您好 我有 2 个以下格式的 csv 基本上是电子邮件列表以及该发件人向我们发送电子邮件的次数 文件1 csv Email Value email protected 2 e email protected 4 email protecte
  • R openNLP无法找到函数sentDetect()

    我正在使用一些软件包 webmining sentiment openNLP 来提取一些有关股票 JPM 的句子 但运行时出现以下错误 eval expr envir enclos 中的错误 找不到函数 sentDetect 这是我使用的代
  • 如何为连接到 I2C gpio 扩展器的虚拟 mdio-gpio 设备配置 ACPI *.asl

    我正在使用 Q7 模块 x86 并尝试在 Linux 上使用 ACPI SSDT Overlay 配置我们的外设 但我对此很挣扎 我想我误解了ACPI的一些核心概念 Problem CPU gt I2C gt PCA9575 GPIO Ex
  • 使用 QXmlQuery (Qt XQuery) 时如何绑定命名空间前缀?

    我正在尝试使用 QXmlQuery 对具有声明的默认命名空间的文档执行 XQuery 表达式 供讨论
  • 当我想从steam市场获取json时,jquery json错误

    我在向 Steam 发送 ajax 请求时遇到问题 我想从蒸汽市场获得价格 function jPrice httpToJson getJSON httpToJson function data return data median pri
  • 如何将 DLL 中的表单嵌入到 Inno Setup 向导页面中?

    我在 Delphi DLL 中构建了一些 VCL 表单 这些表单在 Inno Setup 安装期间显示 然而 如果我可以将这些表单嵌入到 Inno Setup 向导中 那就会更加简洁 我该怎么做呢 对您来说最简单的方法是创建一个导出函数 它
  • 单队列:多个消费者并发消息处理

    我是jms新手 目标是在异步侦听器的 onMessage 方法中同时处理来自队列的消息 方法是将侦听器实例附加到多个消费者 每个消费者使用自己的会话并在单独的线程中运行 这样消息就会传递给不同的消费者并发处理 1 是否可以通过创建多个消费者
  • 在 R Shiny 中使用 renderText() 输出多行文本

    我想使用一个输出多行文本renderText 命令 然而 这似乎不可能 例如 从闪亮教程我们已经截断了代码server R shinyServer function input output output text1 lt renderTe
  • 什么是 JavaScript 数组?

    我试图了解 JavaScript 数组是什么 因为传统编程语言将数组定义为可以使用偏移量寻址的连续存储区域 现在 一个普通的 JavaScript 对象可以被寻址为 myObj myProperty my Value or myObj my
  • React:如何从子组件渲染父组件?

    我的任务是为客户构建一个项目 该项目需要一个父组件包装三个子组件 具体来说 父组件按照以下方式渲染子组件 父级 顶部 中间 底部 PARENT 组件代表一组项目中的一个 在顶部组件中 有一个菜单按钮 显示组中所有项目的列表 其目的是 如果用
  • 在循环中使用 Promises 和 fs.readFile

    我试图理解为什么下面的承诺设置不起作用 注意 我已经使用 async map 解决了这个问题 但我想了解为什么我的以下尝试不起作用 正确的行为应该是 bFunc 应根据需要运行多次以读取所有图像文件 下面的 bFunc 运行两次 然后 cF
  • 计算不带小数的平均值

    我希望我能弄清楚这一点 我需要生成一个表 其平均值称为 AVG AMT 整数 并且没有小数 它可以舍入或截断 对于这张桌子来说 这确实不重要 这是我试图写的 SELECT TC Code AVG ALW AMT as int 8 0 AS
  • 如何在我不想编辑的第 3 方代码中禁用 gcc 发出的未使用变量警告?

    我想知道您将什么开关传递给 gcc 编译器来关闭未使用的变量警告 我在 Windows 上的 boost 中遇到错误 并且我不想触及 boost 代码 C boost 1 52 0 boost system error code hpp A
  • Angular JS 指令 - 模板、编译还是链接?

    我想创建一个 Angular JS 指令来检查字符串的长度 如果字符串太长 无法使用过滤器缩短它 并在鼠标悬停时显示 Angular UI 弹出窗口 我应该在指令中的哪个位置放置功能以使其正常工作 链接 模板或编译 风景 div proje
  • 如何暂停多处理进程?

    我希望用户能够在启动后的任何给定时间暂停多处理的执行 如何实现 我的代码是 coding utf 8 from PySide import QtCore QtGui from Ui MainWindow import Ui MainWind
  • 无法将 1 和 0 的字符串写入二进制文件,C++

    我有一个函数 它接收一个指向带有要打开的文件名的字符串的指针 并用 1 和 0 进行编码 编码线包含类似的东西010100110101110101010011写入二进制文件后 我有完全相同的 你会推荐吗 谢谢 void codeFile c
  • docker React 无法在本地主机上运行

    我正在尝试使用 docker 运行我的 React 应用程序 当我运行容器时 一切看起来都很好 但我无法在本地主机 或 127 0 0 1 上访问它 这是我的配置 Dockerfile FROM node carbon RUN mkdir
  • Django 中的 AbstractUser 与 AbstractBaseUser?

    指某东西的用途AbstractUser and AbstractBaseUser看起来很相似 from django contrib auth models import AbstractUser AbstractBaseUser 两者有什
  • 如何使ForeignKey('self')禁令的管理员引用其自身?

    我有一个模型 其自身带有外键 例如 class Folder models Model name models CharField parent folder models ForeignKey self null True blank T