【问题标题】:How to check if save() was called from django admin如何检查是否从 django admin 调用了 save()
【发布时间】:2019-04-01 16:09:50
【问题描述】:

我要保存两个对象,其中一个是通过 ForeignKey('self') 关联的。

我想检查save() 方法是通过django admin 调用还是作为save() 本身的递归方法调用的。因为我想保存对象的两个实例,而不是无限量。

型号:

prev_work = models.ForeignKey('self', on_delete=models.CASCADE,
editable=False, null=True, blank=True)

保存代码:

prev_work = Work(chapter=self.chapter, job=self.job, prev_work=self)
prev_work.save()

我希望保存两个对象,但我不知道如何阻止程序在每次方法结束时调用 save。 我通过其他方式完成了它,但我仍然想知道如何检查是否从 django admin 调用了方法。 谢谢!

【问题讨论】:

  • 目前还不是很清楚你想要达到什么目的。

标签: python django django-models


【解决方案1】:

目前还不是很清楚你想要达到什么目的,但看起来你想递归调用.save() 的次数是有限的。如果是这种情况,您可以对用作标志或计数器的方法使用自定义关键字参数。

class Work(models.Model):
    def save(self, *args, **kwargs):
        # the default could be the max number of additional calls you want for this method
        call_x_more_times = kwargs.pop('call_x_more_times', 1)

        super().save(*args, **kwargs)
        # ... do other things, if you need to ...

        if call_x_more_times > 0:
            # set argument for next call, decreased by 1
            kwargs['call_x_more_times'] = call_x_more_times - 1
            self.save(*args, **kwargs)

我们无法提供更多帮助,因为您在问题中没有提供太多信息。这对你有帮助吗?

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 2019-02-26
    • 2015-06-25
    • 1970-01-01
    • 2023-02-13
    • 2014-05-16
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多