Django保存覆盖递归不起作用

时间:2017-10-31 22:50:04

标签: python django

我正在尝试设置一个促销代码系统,该系统会自动获得符合条件的用户/学生的声明(由M2M或以逗号分隔的电子邮件字符串指定)。

以下是该模型的相关代码:

class PromoCode(models.Model):
    students_claimed = models.ManyToManyField('Student', blank=True, related_name='promo_codes_claimed')
    claimable_by = models.ManyToManyField('Student', blank=True, related_name='claimable_promo_codes')
    claimable_by_emails = models.CharField(max_length=10000, null=True, blank=True)

    def save(self, *args, **kwargs):
        if self.claimable_by_emails:
            for email in self.claimable_by_emails.split(','):
                try:
                    student = Student.objects.get(user__email=email)
                    student.claim_promo_code(self)
                except Student.DoesNotExist:
                    pass

        for student in self.claimable_by.all():
            student.claim_promo_code(self)

        super().save(*args, **kwargs)

claim_promo_code中的Student方法如下:

def claim_promo_code(self, promo_code):
    if promo_code.is_claimable_by(self):
        promo_code.students_claimed.add(self)
        promo_code.save()

        print('TEST')

我知道正在调用claim_promo_code方法,因为print语句正在运行;但是,用户未被添加/保存到students_claimed。通过其他方式(claim_promo_code方法之外)调用save方法可以按预期工作。

在这里调用对象的save方法是否有问题,就像这里的情况一样?我应该如何解决这个问题呢?

0 个答案:

没有答案