【问题标题】:How to execute custom SQL query when deleting a model item in Django?在 Django 中删除模型项时如何执行自定义 SQL 查询?
【发布时间】:2020-02-06 10:01:15
【问题描述】:

我想在管理界面中删除项目时执行 SQL 查询。在 models.py 我这样做:

from django.db import connection

class LList(models.Model):
    item = models.ForeignKey(Item, models.DO_NOTHING)

    def delete(self, *args, **kwargs):
        cursor = connection.cursor()
        cursor.execute('DELETE FROM some_table where item = %d', [self.item.id])

当我打开调试时,我看到所有查询都已执行。好像没有执行DELETE FROM查询,我只看到了

(0.000) DELETE FROM `llist` WHERE `llist`.`id` IN (27); args=(27,)

为什么没有执行另一个 DELETE FROM 查询?我该如何解决?

【问题讨论】:

  • 你是如何在管理界面执行删除操作的?
  • 哦,我明白你的意思了,不知道有两种可能删除一个项目。我希望 SQL 查询以两种可能的方式执行,选择删除和​​删除。

标签: django django-models django-forms django-templates django-admin


【解决方案1】:

您以错误的方式覆盖了删除功能,

def delete(self, using=None, keep_parents=False):
    with connection.cursor() as cursor:
        cursor.execute('''DELETE FROM some_table where item = %d''', [self.item.id])

    super(LList, self).delete(using, keep_parents)

但我相信更好的方法是使用信号来实现,你应该创建一个 pre_delete 信号。

【讨论】:

  • 太好了,这样直接删除就可以了,但是当我通过删除选择删除项目时它不起作用。在这种情况下我必须调用什么样的函数?
  • 能否请您写下您尝试执行的 sql 查询。到时候我就能更好地解决问题了。
猜你喜欢
  • 2015-07-26
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多