我的模型有一个自定义的 .save 方法。该模型具有 start_date
和 last_edited
值。如果这些值之间的差异超过 14 天,则应在保存时复制/克隆自身(而不是保存)。
您可能已经看到这个问题:无限递归。如果克隆 self 保存,这些值仍然会相差 14 天,并且整个复制过程将重新开始。
因此,我想在这些副本的 .save 参数中传递一个 'copy'
参数,以防止它们自行触发复制过程。
为此我编写了以下代码:
def save(self, *args, **kwargs):
#check if a submission is older than the 'create a new one' threshold
#Create a new one if that is the case
delta = self.last_edited - self.start_date
print(args)
print(kwargs)
if 'copy' in kwargs or 'copy' not in args:
print('cloning!')
if delta.days >= 14:
clone = self
clone.pk = None
clone.save('copy')
super(AssessmentSubmission, self).save(*args, **kwargs)
但是,由于某种原因 clone.save(copy)
不会将“copy”变量传递给 .save 方法。我什至添加了一些打印语句来打印所有 args 和 kwarg 参数,但两者都返回空列表/字典。
有人知道我做错了什么吗?
最佳答案
为什么不在模型中设置一个标志字段?比 *kwargs
和 **args
更干净。像这样的东西:
class AssessmentSubmission(models.Model):
'''
Your other fields here
'''
flag_field = models.IntegerField(default=0,blank=True,null=True)
def save(self):
#check if a submission is older than the 'create a new one' threshold
#Create a new one if that is the case
delta = self.last_edited - self.start_date
print(args)
print(kwargs)
if not self.flag_field:
print('cloning!')
if delta.days >= 14:
clone = self
clone.pk = None
clone.flag_field = 1
clone.save('copy')
super(AssessmentSubmission, self).save()
关于python - Django - 将参数传递给自定义 .save 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48932579/