【问题标题】:Django Post save signal gives error save() missing 1 required positional argument: 'self'Django Post 保存信号给出错误 save() 缺少 1 个必需的位置参数:'self'
【发布时间】:2021-03-22 07:28:54
【问题描述】:

我一直在研究以下模型

class Member(BaseModel):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    refer_code = models.CharField(
        max_length=20,
        unique=True,
        blank=True,
        null=True
    )

并且将refer_code设置为在调用save方法时自动生成,即在创建期间(而不是在更新期间)这是我的干净方法和保存方法。

def clean(self):
    if not self.user.is_member:
        raise DjangoValidationError({'user': _('User must member')})

def save(self, *args, **kwargs):
    if self._state.adding:
        self.refer_code = self.user.username
    super(Member, self).save(*args, **kwargs)

post_save.connect(save, sender=User)

我按照 youtube 上的某些教程进行操作,但出现以下错误

save() missing 1 required positional argument: 'self'

我希望在创建过程中触发 post_save 信号,所以我尝试 created = True 但出现错误。

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果你的save 是在模型上定义的,那么你就不需要使用post_save 信号——save 将在对象被保存时被自动调用。如果您仍然需要使用信号 - 请查看 arguments defenition。这是信号示例:

    @receiver(post_save, sender=Member)
    def your_signal(sender, instance, created, **kwargs):
        # second part of if expression is needed to avoid recursive
        # save call
        if instance._state.adding and not instance.refer_code:
            instance.refer_code = instance.user.username
            instance.save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 2019-11-04
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多