Как выполнить пользовательский SQL-запрос при удалении элемента модели в Django? - PullRequest
0 голосов
/ 09 октября 2019

Я хочу выполнить запрос 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? Как я могу это исправить?

1 Ответ

1 голос
/ 09 октября 2019

Вы переопределяете функцию удаления неправильным образом,

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...