0

我有一个自定义字段,其中有一个图像字段作为参考,我使用我的字段如下:

 poster = ImageField(upload_to=get_path, null=True, blank=True )
 cropping = CropField('poster')#this is my custom field

现在我需要一种方法来监听引用的图像字段变化......我想我可以在 models.py 中使用信号,但我需要一种干的方式。我不想为每个具有裁剪自定义字段的模型放置一个信号。

我想我需要一种在自定义字段代码中做到这一点的方法。但是哪里?在字段描述符中?在 FieldCreator 中?

4

1 回答 1

0

如果要确定模型的底层属性是否已更改,可以覆盖 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如果您希望每个模型在更改时具有不同的行为,您还可以使用调用子类中定义的函数。我不确定您要使用自定义字段完成什么,但希望这可以为您指明创建自定义模型和字段的正确方向。

于 2013-11-12T22:40:55.053 回答