gpt4 book ai didi

python - Django ORM : Implement Pre-save for a "Field" instead of a "Model"

转载 作者:行者123 更新时间:2023-12-01 08:12:33 24 4
gpt4 key购买 nike

假设我有这个模型:

class MyModel(models.Model):
char_field = models.CharField(max_length=64)
json_field = LimitedJSONField(default={})

其中 LimitedJSONField 是用于在数据库上存储 JSONString 的自定义字段。

我想对 json_field 进行预保存检查(例如,如果超过则截断其长度)。我已经阅读了有关 MyModel 的重写 save 方法,我也知道我可以实现 pre-save 信号,但我想在领域级。因为假设我在 500 个模型上使用 LimitedJSONField。我是否必须为这 500 个模型中的每一个模型重写 save 方法?我在 LimitedJSONField 上实现了 validate 方法,但它不会在保存时触发(仅在表单验证时触发,即 full_clean 例程)。

如何为 LimitedJSONField 实现验证器,以便无论 Model 使用它,该字段都会根据 LimitedJSONField 中编写的单个业务逻辑进行验证

简单地说,我想在 field 类中实现逻辑,并且我不想在 Model 类中编写任何逻辑,以便解决方案可以扩展,以便新的 Model 类使用该字段无需实现boilerplace逻辑代码。

非常感谢您的宝贵时间!

最佳答案

您能否创建一个具有单个保存方法的父类,并将其用作所有其他模型继承的 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)

那么您只需编写一个重写的保存方法。

关于python - Django ORM : Implement Pre-save for a "Field" instead of a "Model",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55150839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com