如果要确定模型的底层属性是否已更改,可以覆盖 save 方法进行检查。这个答案描述了如何做到这一点。
要使其可用于任何具有 的模型CropField
,您可以为使用的模型创建一个抽象基类CropField
class CropFieldModel(models.Model):
def save(self, *args, **kwargs):
#logic to determine which field is an imageField.
attrs = dir(self)
for attr in attrs:
if isisntance(attr, CropField):
#whatever logic you want to to modify the object
super(CropFieldModel, self).save(*args, **kw)
class Meta:
abstract = True
然后,所有使用您的模型CropField
都可以子类CropFieldModel
化,您将获得自定义保存功能。
class MyModel(CropFieldModel):
poster = ImageField(upload_to=get_path, null=True, blank=True )
cropping = CropField('poster')
这将使您不必重复自己,并在模型实例更改时为您提供自定义逻辑。getattr
如果您希望每个模型在更改时具有不同的行为,您还可以使用调用子类中定义的函数。我不确定您要使用自定义字段完成什么,但希望这可以为您指明创建自定义模型和字段的正确方向。