社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

django orm:为“field”而不是“model”实现预保存

Ali Yılmaz • 5 年前 • 1220 次点击  

假设我有这个模型:

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

哪里 LimitedJSONField 是用于在数据库上存储jsonstring的自定义字段。

我想做预存检查 json_field (例如,如果超过,截短其长度)。我读过关于重写的书 save 方法 MyModel ,我也知道我可以实现 pre-save 信号,但我想在现场处理。因为我用 有限J现场 500个型号。我必须超越 节约 这500个模型的方法是什么?我实现了 validate 方法对 有限J现场 但它不会在保存时触发(它只在表单验证时触发,即 full_clean 例行公事)

如何实现验证程序 有限J现场 ,所以不管怎样 Model 使用它,该字段将根据内部编写的单个业务逻辑进行验证 有限J现场 ?

简单地说,我想在 field 类和我不希望在模型类中写入任何逻辑,因此解决方案是可伸缩的,新模型类可以使用此字段,而无需实现样板逻辑代码。

非常感谢你的时间!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40656
 
1220 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Art Vandelay
Reply   •   1 楼
Art Vandelay    6 年前

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

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