python - 如何将 django 模型字段值作为参数传递给可调用的(同一模型中字段的默认值)?

标签 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'))

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

最佳答案

您可以在创建时通过模型的 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)

关于python - 如何将 django 模型字段值作为参数传递给可调用的(同一模型中字段的默认值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34128251/

相关文章:

python - obj 必须是 type 的实例或子类型

python - 更新 matplotlib 中的线条

python - 如何在 PySpark DataFrame 中将 ArrayType 转换为 DenseVector?

django-ajax-selects 示例用法

django - celery 任务完成后重定向到模板

django - 如何为已获取的列表预获取相关对象?

python - 在 Django 中增加页面点击计数

Django/Python : Tried to update field with a model instance. 使用与 CharField 兼容的值

python 错误 - unboundLocalError

python - 如何在 Django 中实现基本身份验证