【问题标题】:update preview field after submitting the value提交值后更新预览字段
【发布时间】:2018-04-29 12:25:41
【问题描述】:

我有一个用于存储文档编号的模型,其中要填写的字段是文档、前缀、后缀、长度和开始。我可以这样做,但是在填写完这些数据后,我需要在表格中显示预览字段,并且预览字段基于前缀、后缀和长度。

我的意思是,如果我将前缀填写为 1,后缀填写为 -2345,长度填写为 4,那么该文档的预览应该为

1xxxx-2345

如果前缀为he-,后缀为-7459,长度为5,则预览应为

he-xxxxx-7459

这可以通过以下逻辑来完成

preview = str(prefix)+(('x')*length)+str(sufix)

但是我如何在 django 中实现这一点。我必须使用信号或覆盖保存方法吗?谁能给我一个想法,好吗?

这是我的模型

class DocumentNumbering(models.Model):
    office = models.OneToOneField(OfficeSetup, blank=True, null=True)
    document = models.OneToOneField(Document blank=False, null=False)
    prefix = models.CharField(max_length=100, blank=True, null=True)
    sufix = models.IntegerField(blank=True, null=True)
    start_number = models.PositiveIntegerField(
        default=0, blank=False, null=False)
    length = models.PositiveIntegerField(default=0, blank=False, null=False, validators=[
                                         MaxValueValidator(10), MinValueValidator(1)])

    // not sure where to implement the logic for preview
    def save(self, *args, **kwargs):

【问题讨论】:

  • 另外我只是想补充一点,如果您决定使用覆盖save() 方法的方法,那么请小心使用bulk_create() 等函数,因为它不会调用@ 987654327@.
  • 感谢您的提示

标签: python django python-3.x django-models


【解决方案1】:

您真的需要将其存储在数据库中吗?如果只是出于显示目的,您可以使用派生属性:

@property
def preview(self):
    return str(self.prefix)+(('x')*self.length)+str(self.sufix)

【讨论】:

  • 我不确定哪种方法最好。我知道的方法是您作为解决方案发布的一种方法,另一种保存方法和另一种信号。在这三个中,哪一个会更好,为什么?你能启发我吗?它将帮助我针对所需情况使用正确的方法。
  • 我对保存和信号感到困惑。我理解的属性部分,但保存与信号我仍然感到困惑。
  • 您对该领域有什么要求?如果只是为了在表格中显示,那么我肯定会推荐使用@property 方法。但是,如果您需要对字段执行操作,例如查询它,那么您希望数据库来处理它。
  • 我需要保存在数据库中,以便从该预览值中进行搜索。
  • 在这种情况下,我建议重写 save() 方法来更新预览字段(看起来您必须为其创建迁移,以更新数据库表)。这将确保您的预览数据库字段始终与前缀、后缀和长度字段匹配(只要您不使用 bulk_create() 之类的东西。如果其他模型需要跟踪这个模型发生了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 2016-08-01
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多