【问题标题】:Insert duplicate column value in Django在 Django 中插入重复的列值
【发布时间】:2021-05-03 02:43:46
【问题描述】:

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

电流输出

Column 1         Column 2
 5000              5000
 3650              5000
 2000              5000

预期输出

Column 1         Column 2
 5000              5000
 3650              3650
 2000              2000

models.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)

【问题讨论】:

  • 如果列应该同步,为什么是第二列?
  • @Klaus D. 是的,第二列应该与第一列相同,例如amount _paid 应该与amount 中的值相同
  • @MarieLoise :正如我分享的链接中所述。您可以覆盖您的保存方法,该方法将从第一列获取信息并将其分配给第二列
  • 但是你为什么需要第二列呢?你可以只用第一个。它具有相同的值。

标签: python django


【解决方案1】:

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

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并将其设置为默认值。

给定的解决方案也有一定的缺陷,即如果您更改金额,金额_已付款将自动更改。如果要在 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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 2017-07-03
    • 1970-01-01
    • 2022-01-08
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多