PostgreSQL удаление записей из двух объединенных таблиц на основе условий

В моем проекте django, с подключенной базой данных PostgreSQL, я создаю эти две модели:

class Results(models.Model):
    device = models.ForeignKey(Device, null=True, on_delete=models.SET_NULL)
    proj_code = models.CharField(max_length=400)
    res_key = models.SlugField(max_length=80, verbose_name="Message unique key", primary_key=True, unique=True)
    read_date = models.DateTimeField(verbose_name="Datetime of vals readings")
    unit = models.ForeignKey(ModbusDevice, null=True, on_delete=models.SET_NULL)


class VarsResults(models.Model):
    id = models.AutoField(primary_key=True)
    key_res = models.ForeignKey(Results, related_name="keyres", on_delete=models.CASCADE)
    var_id = models.ForeignKey(ModbusVariable, null=True, on_delete=models.SET_NULL)
    var_val = models.CharField(max_length=400, blank=True)
    var_val_conv = models.CharField(max_length=100, blank=True, null=True)
    base_byte_order = models.CharField(max_length=15)
    var_hash = models.CharField(max_length=400)
    has_error = models.BooleanField(default=False)

так как VarsResults имеет внешний ключ к Results, я бы удалил некоторые записи в обеих таблицах, начиная с условия, основанного на Results, например,

DELETE RECORDS FROM RESULTS IF RESULTS read_date < VALUE

Я хотел бы автоматически удалить все связанные записи в таблице VarsResults. Есть ли метод в django ORM или непосредственно с помощью SQL для достижения этого?

Заранее большое спасибо

Поскольку у вас есть on_delete=models.CASCADE в вашем ForeignKey, всякий раз, когда вы удаляете объект Results, все связанные с ним VarsResults также будут удалены. Вам просто нужно удалить Results, и вы можете сделать это с помощью одного запроса:

Results.objects.filter(read_date__lt=value).delete()
Вернуться на верх