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

问题描述 投票:4回答:1

这是我想做的:

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 protected]', hash=createNewsletterHash('[email protected]'))

并且不对哈希字段使用默认参数吗?

python django django-models
1个回答
2
投票

您可以在创建时通过模型的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().save(*args, **kwargs)
© www.soinside.com 2019 - 2024. All rights reserved.