如何将django模型字段值作为参数传递给同一模型中字段的默认值callable?

时间:2015-12-07 07:14:36

标签: python django django-models

这是我想要做的:

def createNewsletterHash():
    hash = hashlib.sha256()
    hash.update(str(time.time()))
    hash.update(emailValueOfThisModel) # HOW TO DO THIS?
    return hash.hexdigest()

class NewsletterSubscriber(models.Model):
    email = models.EmailField(max_length=70, unique=True)
    hash = models.CharField(default=createNewsletterHash, unique=True)

我假设在创建对象时无法获取其他字段的值。但有没有更简洁的方法,然后在创建对象后设置哈希值或在创建时明确设置哈希值,如:

NewsletterSubscriber.objects.create(email='email@email.com', hash=createNewsletterHash('email@email.com'))

并且没有使用哈希字段的默认参数?

1 个答案:

答案 0 :(得分:1)

您可以在模型的save方法中创建其他字段的值。

class NewsletterSubscriber(...):
    ...
    hash = models.CharField(blank=True, max_length=150)

    def save(self, *args, **kwargs):
        if not self.pk: # this will ensure that the object is new
            self.hash = createNewsLetterHash(self.email)
        super(NewsletterSubscriber, self).save(*args, **kwargs)

抬起头来!

在Python 3上,super的语法已经改变。

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