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()