首页 > 解决方案 > 使用 Django ORM 从 2 个表中删除记录

问题描述

我正在使用 Django 并且有 2 个表,我想从连接中删除记录。

这些是简化的模型定义:

from django.db import models

class MyModelA(models.Model):
    created = models.DateTimeField(null=True, blank=True)

class MyModelB(models.Model):
    modela = models.OneToOneField(
        MyModelA, on_delete=models.DO_NOTHING, db_constraint=False
    )
    created = models.DateTimeField(null=True, blank=True)

如果我使用SQL,我可以编写一个DELETE带有连接的语句,这将删除连接返回的所有记录,如下所示:

DELETE a, b 
FROM mymodela AS a
INNER JOIN mymodelb AS b
ON a.id = b.modela_id
WHERE a.created < '<some date>'

我想使用 Django ORM 和delete()方法。

我可以使用以下方法轻松编写SELECT等效内容:

MyModelA.objects.filter(mymodelb__isnull=False)
    .filter(created__lt=<some date>)
    .select_related("mymodelb")

但是,当我链接 时,仅删除了delete()中的记录,并且生成的-query 是这样的:MyModelASQL

DELETE FROM mymodela WHERE mymodela.id IN (<LIST OF IDs in JOIN>)

我当然可以使用不同的on_delete操作或获取 id 列表并逐表删除记录,但我想知道:是否可以获得DELETE a, b FROM...如上所示的语句?

标签: pythondjango

解决方案


推荐阅读