使用Django,如何在第一次访问字段时生成字段的值?然后将值存储在字段上。
在我的情况下,它是一个图像,但它可能是我想的任何东西。我需要的是一个在访问字段或包装访问之前运行的函数,并在检查我生成它的空值时,或类似的东西。
答案 0 :(得分:3)
现在已经在djangoproject开了一张getters and setters票了几年,但没有运气。我已经看到了你描述的情况的三种常见方法:
将您的模型字段设置为其他名称,例如image_field
,并在查询对象中编写一个名为property
的getter / setter对(使用python的image
语法)那个领域。这将适用于您的函数的临时使用,但是框架内的任何调用都会明显忽略您的getter / setter。
如果可能的话,创建您自己的custom field子类,为您提供魔力。
以ozanonay建议覆盖保存。
答案 1 :(得分:1)
在保存对象时,有什么理由不能这样做吗?因为通过覆盖相关模型中的save方法很容易实现,例如:
def save(self, force_insert=False, force_update=False):
if not self.image:
self.image = foo
super(RelevantModel, self).save(force_insert, force_update)
当然,如果在首次保存对象的时间与首次访问特定字段的时间之间存在相关差异,则这不能解决您的问题。