假设我有这个模型:
class MyModel(models.Model):
char_field = models.CharField(max_length=64)
json_field = LimitedJSONField(default={})
其中LimitedJSONField
是用于在数据库上存储JSONStrings的自定义字段。
我想对json_field
进行预保存检查(例如,如果超出长度,则将其截短)。我已经阅读了有关为save
覆盖MyModel
方法的知识,我也知道我可以实现一个pre-save
信号,但是我想在字段级进行处理。因为假设我在500个模型上使用了LimitedJSONField
。对于这500个模型中的每个模型,我都必须重写save
方法吗?我在validate
上实现了LimitedJSONField
方法,但是在保存时不会被触发(仅在表单验证即full_clean
例程中触发)。
我如何实现LimitedJSONField
的验证器,以便无论Model
使用哪种验证器,此字段都将针对LimitedJSONField
内编写的单个业务逻辑进行验证?
简单地说,我想在field
类中实现逻辑,并且我不想在Model类中编写逻辑,因此该解决方案可扩展为新Model类使用该字段而无需实施锅炉逻辑代码。
非常感谢您的宝贵时间!
答案 0 :(得分:1)
您可以使用单个保存方法制作一个父类并将其用作所有其他模型继承的mixin吗?
类似的东西:
class SpecialJsonModel(models.model):
json_field = LimitedJSONField(default={})
def save(self, *args, **kwargs):
// Specific save logic goes here
class OtherModelA(SpecialJsonModel)
char_field = models.CharField(max_length=64)
class OtherModelB(SpecialJsonModel)
char_field = models.CharField(max_length=64)
然后,您只需要编写一个覆盖的保存方法即可。