首页 > 解决方案 > 在 Django 中插入重复的列值

问题描述

有什么办法可以将值复制到另一列,例如,每当我将数据上传到第 1 列时,值应该是相同的。我3000在第 1 列,第 2 列的值应该自动写入3000,可以在模型中欺骗吗?或者当插入查询而不是使用默认值时?提前致谢!。

电流输出

Column 1         Column 2
 5000              5000
 3650              5000
 2000              5000

预期产出

Column 1         Column 2
 5000              5000
 3650              3650
 2000              2000

模型.py

class Person(models.Model):
    amount = models.CharField(max_length=50,blank=True, null=True)
    amount_paid = models.CharField(max_length=60,default='5000', null=True)

标签: pythondjango

解决方案


您可以简单地覆盖保存方法:

class Person(models.Model):
    amount = models.CharField(max_length=50,blank=True, null=True)
    amount_paid = models.CharField(max_length=60,default='5000', null=True)

    def save(self, *args, **kwargs):
       self.amount_paid = self.amount
       super().save(*args, **kwargs)

但是没有必要存储重复值,除非你需要它,你可以简单地添加一个布尔字段,is_paid并将其设置为 True 作为默认值。

给定的解决方案也存在一定的缺陷,即如果您更改金额,金额_已付款将自动更改。如果要在创建 Person 实例时更新 amount_paid ,则可以添加 if else 逻辑:

def save(self, *args, **kwargs):
    if not self.pk:  # instance not created yet
       self.amount_paid = self.amount
    super().save(*args, **kwargs)

或者,您可以使用 Django Queryset 批量更新amount_paid. 例如:

from django.db.models import F
Person.objects.filter(pk__in=[1,2,3]).update(amount_paid=F('amount'))

推荐阅读