Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 提交值后更新预览字段_Python_Django_Python 3.x_Django Models - Fatal编程技术网

Python 提交值后更新预览字段

Python 提交值后更新预览字段,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,我有一个存储文档编号的模型,其中要填充的字段是文档、前缀、后缀、长度和开始。我可以这样做,但在填充这些数据后,我需要在表中显示预览字段,预览字段基于前缀、后缀和长度 我想说的是,如果我将前缀填充为1,后缀填充为-2345,长度填充为4,那么该文档的预览应该是 1xxxx-2345 如果前缀为he-,后缀为-7459,长度为5,则预览应为 he-xxxxx-7459 这可以通过以下逻辑完成 preview = str(prefix)+(('x')*length)+str(sufix) 但我如

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

我想说的是,如果我将前缀填充为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):

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

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

此外,我还想补充一点,如果您决定使用覆盖
save()
方法的方法,那么请小心使用诸如
bulk\u create()
之类的函数,因为它不会调用
save()
。感谢tipsI,我不确定哪种方法是最好的。我知道的方法是你发布的解决方案,另一个保存和另一个信号。在这三者中,哪一个更好?为什么?你能告诉我吗?这将帮助我在需要的情况下使用正确的方法。我在保存和信号时会感到困惑。物业部分我理解,但保存vs信号我仍然不清楚。你对该领域有什么要求?如果只是为了在表中显示,那么我绝对建议使用
@property
方法。但是,如果需要对字段执行操作,例如查询字段,则需要数据库来处理该操作。我需要保存在数据库中,以便可以从该预览值进行搜索。在这种情况下,我建议重写
save()
方法来更新预览字段(看起来您必须为其创建迁移以更新数据库表)。这将确保用于预览的数据库字段始终与前缀、后缀和长度字段匹配(只要您不使用类似于
bulk\u create()的内容)
。如果其他模型需要跟踪此模型中发生的情况,则最好使用信号。