Возможно ли в таблицах модели Django выполнять арифметические операции над записью в другой таблице?

Как заполнить строку или добавить вторую таблицу? Мне нужно выполнить вычисления с последней строкой из первой таблицы и отправить результаты во вторую таблицу. Это чем-то напоминает обработку данных в двух DataFrame .

Как добавить таблицу значений в модель после выполнения вычислений на данных последней строки из другой табличной модели?

Или это возможно только при участии функциональности DataFrame?

class Model_1(models.Model):
    name_1 = models.IntegerField()
    name_2 = models.IntegerField()
    name_3 = models.IntegerField()
    name_4 = models.IntegerField()

class Model_2(models.Model):
    name_5 = models.IntegerField()
    name_6 = models.IntegerField()

queryset = Model_1.objects.all()
values_m1 = queryst.name_1 * queryst.name_2 / queryst.name_3 - queryst.name_4

queryset = Model_2.objects.all()
values_m2 = queryst.name_5 = values_m1 

Одним из способов было бы выполнить вычисления с помощью набора queryset, а затем создать новый экземпляр Model_2 с вычисленными значениями и сохранить его.

queryset = Model_1.objects.all()
last_row = queryset.last()
values_m1 = last_row.name_1 * last_row.name_2 / last_row.name_3 - last_row.name_4

new_entry = Model_2(name_5=values_m1)
new_entry.save()

Второй вариант - использовать Django ORM для выполнения вычислений и вставки данных в одном запросе.

from django.db.models import F

Model_2.objects.create(name_5=F('name_1')*F('name_2')/F('name_3')-F('name_4'))

У вас есть два варианта синхронизации двух таблиц вместе.

  1. Использование сигналов Django post_save. В этом подходе вы устанавливаете post_save для первой таблицы, а затем, вы будете обновлять вторую таблицу каждый раз, когда что-то сохраняется в первой таблице.
from django.db.models.signals import post_save
from django.dispatch import receiver
class Model_1(models.Model):
    name_1 = models.IntegerField()
    name_2 = models.IntegerField()
    name_3 = models.IntegerField()
    name_4 = models.IntegerField()

class Model_2(models.Model):
    name_5 = models.IntegerField()
    name_6 = models.IntegerField()

# method for updating
@receiver(post_save, sender=Model_1)
def update_stock(sender, instance, **kwargs):
    # Do the calculation Here to update the model 2
  1. Использование триггеров Postgres. Этот подход будет реализован на вашей базе данных, и никакой код на python не будет выполняться. Все будет управляться в базе данных.
Вернуться на верх