python - Django - 将参数传递给自定义 .save 方法

标签 python django django-forms

我的模型有一个自定义的 .save 方法。该模型具有 start_datelast_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/

相关文章:

python - 检查给定的代码行是否完整和正确的 Python 代码

python - createsuperuser 没有要求用户名

python - 如何获取视频的长度以便在开始上传之前验证 django 表单?

列表/numpy数组中的Python平衡项

python - 如何使用 ast 列出函数的参数?

python - 根据给定条件向现有数据框添加多个新列

python - 如何在不刷新页面的情况下渲染存储在外部模型中的一段数据?

javascript - 一个 django 表单,有两个输入、两个 url、两个 View ,下一页都有不同的 js

python - 如何在 Django 中将权限添加到模型并使用 shell 对其进行测试

python - 如何排除 django 模型中的选择字段值?