Python 提交值后更新预览字段
我有一个存储文档编号的模型,其中要填充的字段是文档、前缀、后缀、长度和开始。我可以这样做,但在填充这些数据后,我需要在表中显示预览字段,预览字段基于前缀、后缀和长度 我想说的是,如果我将前缀填充为1,后缀填充为-2345,长度填充为4,那么该文档的预览应该是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) 但我如
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()的内容)
。如果其他模型需要跟踪此模型中发生的情况,则最好使用信号。