以下是我想要做的事情:
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'))
不使用散列字段的默认参数?
True
?我不希望hash
字段被留空,如果我总是在创建时填充它,那么允许它为空就没有意义,对吧? - dsalajblank=True
,这样当用户提交表单时,不会因为用户不负责哈希而引发错误。它将在后台自动填充,因此实际上永远不会为空。我认为你把blank=True
和null=True
搞混了。 - xyresforms.py
中定义了我的表单,其中包含fields = ['email']
。模型中没有任何字段设置为blank=True
,当用户提交表单时也没有产生错误。我尝试显式地将blank=False
设置为False
,但仍然没有错误。null=False
也是一样。我还尝试删除save
方法的覆盖,但行为仍然相同。现在我真的很困惑为什么Django不报告任何错误(即哈希值存储为空字符串u''
在模型中)。 - dsalajblank=True
(不破坏它,如果它没有问题)。我想我让你对所有这些感到困惑了。:P 忽略我之前的评论。 - xyres