在Django模型表中是否可以对另一个表中的记录执行算术运算?

dauxcl2d  于 2023-01-21  发布在  Go
关注(0)|答案(2)|浏览(138)

如何填充行或添加第二个表?我需要对第一个表中的最后一行执行计算,并将结果发送到第二个表。这让人想起在两个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
wh6knrhe

wh6knrhe1#

一种方法是使用查询集执行计算,然后使用计算值创建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()

第二个选项是使用DjangoORM来执行计算并将数据插入到单个查询中。

from django.db.models import F

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

vs3odd8k2#

可以有两种选择来同步两个表。
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. Using Postgres triggers。这种方法将在你的数据库上实现,并且不会运行任何python代码。一切都将在数据库中管理。

相关问题