通过on_delete选项,Django提供了各种方法来处理具有被删除对象外键的对象。
我想知道是否有一种方法,我可以做类似的事情,但有条件的。下面是一个场景。我正在使用Django1.5新的自定义用户模型,我的所有用户都有一个网站的外键。像这样:
class TenantSiteUser(AbstractUser):
site = models.ForeignKey(Site, null=True)
如果一个站点被删除了,那么我更愿意删除所有链接到该站点的非超级用户(即类似KASKADE的behavoir),因为它们的存在现在已经没有意义了。但如果是超级用户,我更愿意将用户的站点设置为null(即set_null),并让它们保持存在,因为这可能是我或我的同事,我们不想无意中删除自己。
有什么我可以重写的手动检查和实现这种类型的on_delete行为?
编辑:以下是最终对我有效的代码,基于@Kevin的回答和对现有处理程序如何工作的一些研究:
def NULLIFY_SUPERUSERS_ELSE_CASCADE(collector, field, sub_objs, using):
superusers = []
for user in sub_objs:
if user.is_superuser:
sub_objs = list(sub_objs)
sub_objs.remove(user)
superusers.append(user)
CASCADE(collector, field, sub_objs, using)
if len(superusers):
collector.add_field_update(field, None, superusers)
class TenantSiteUser(AbstractUser):
site = models.ForeignKey(Site, null=True, on_delete=NULLIFY_SUPERUSERS_ELSE_CASCADE)
Django提供的选项(CASCADE
,PROTECT
等)都是函数,下面是1.5版的定义。
我还没有测试过它,但应该可以编写自己的NULL\u或\u CASCADE
函数,并将其作为字段的on\u delete参数传入。
问题内容: 我必须转换一个传递查询的MSSQL存储过程: 这不起作用。我敢肯定,而不是MySQL的命令,但也不管用。 有谁知道是否有可能为MySQL提供类似JavaScript的功能? 问题答案: EXECUTE是MySQL中的有效命令。MySQL参考手册
问题内容: 我正在寻找一种在客户端(即在浏览器中)进行traceroute的方法。 据我所知,不可能通过Javascript或Flash发送具有任意TTL值的ICMP,UDP或TCP数据包。我知道Flash允许通过Actionscript中的Socket类进行TCP连接,但是它对于traceroute实现似乎没有用。 是开发浏览器插件的唯一解决方案吗? 编辑 :我刚刚发现它已经用Java小程序完成
问题内容: 我想编写一个与此SQL查询等效的Django查询: 如何构造Django queryset过滤器? 这是行不通的,因为它是过滤器。我想要过滤器以获取单个查询集的并集。 问题答案: 通过文档
是否有可能在函数的上下文中解析(实现)一个promise对象?是否有其他方法处理这个问题? UPD:这个代码对我有效。谢了!
问题内容: 简而言之,我需要能够将已编译的可执行文件粘贴到Java jar文件中,然后能够从Java运行它(可能通过)。 的 原因 ,是我想使用Java来包裹ImageMagick的可执行文件成分的图像处理弹性的Map Reduce任务。EMR只希望获取一个jar文件,因此我认为没有空间在旋转的数据节点上安装软件。 问题答案: jar中的可执行文件是一种资源,您可以通过Stream访问它,并将可执
这是我想做的代码,但什么也没有做。我甚至试过这个 但我找不到任何解决办法...有人能帮我吗?