django防止模型根据条件进行更新

django防止模型根据条件进行更新,django,django-models,Django,Django Models,我有一个django模型,结构如下 类角色(models.Model): """ 表示全局角色对象。 角色有自己的特点: -十六进制颜色代码[整数表示] -名称[&] -位置 -权限。 空位置值表示默认角色。 到目前为止,集群只有一个默认角色[@everyone]。 """ 类元: 排序=['位置','簇'] 所需的\u db\u功能={ “支持可延迟的唯一约束”, } 约束=[ 模型.唯一约束( 字段=['position','cluster'], name='deferrable\u uni

我有一个django模型,结构如下

类角色(models.Model):
"""
表示全局角色对象。
角色有自己的特点:
-十六进制颜色代码[整数表示]
-名称[&]
-位置
-权限。
空位置值表示默认角色。
到目前为止,集群只有一个默认角色[@everyone]。
"""
类元:
排序=['位置','簇']
所需的\u db\u功能={
“支持可延迟的唯一约束”,
}
约束=[
模型.唯一约束(
字段=['position','cluster'],
name='deferrable\u unique\u role\u position',
可延期=模型。可延期。延期
),
模型.唯一约束(
字段=['id','cluster'],
name='relative\u unique\u role\u id'
)
]
#群集和id必须都是主键
#确保端点有意义
objects=api_managers.RolesManager()
id=models.BigAutoField(主键=True,db\u索引=True,可编辑=False,自动创建=True)
权限=位字段(标志=权限标志,默认值=默认值,db索引=真)
position=models.PositiveSmallIntegerField(null=True,blank=True,db_index=True,editable=True)
name=models.CharField(max_length=100,validators=[MinLengthValidator(2)],db_index=True,default='newrole')
color=ColorField(db_index=True,默认值为'#9696')
cluster=models.ForeignKey('api\u backend.DataSheetsCluster',on\u delete=models.CASCADE,editable=False)
在=models.DateTimeField处创建(auto\u now=True,editable=False,db\u index=True)
必填_字段=[名称,群集]
我想确保位置为
NONE
Role
对象不能具有

  • 名字
  • 颜色[或]
  • 位置 更新。只能更改“权限”字段。 有什么方法可以在django中实现吗

  • 一种方法是添加save方法以防止模型保存,除非定义了角色。比如说,

        def save(self, *args, **kwargs):
    
            if self.role:
    
                super().save(*args, **kwargs)
    
            else:
                super().save(update_fields=['permissions',]