Python Django-保存时从不更新列

Python Django-保存时从不更新列,python,django,citus,Python,Django,Citus,我正在尝试将citus data()用于Django 到目前为止,除了尝试保存已保存的模型外,其他大部分功能都正常工作: NotSupportedError: modifying the partition value of rows is not allowed 这是因为django始终包含更新SQL中的每个字段,即使该字段没有更改 在Citus中,必须选择一个字段作为分区字段,然后不能更改它。所以,当我保存一个对象时,分区键不在update语句中,即使它没有改变 我知道您可以将update

我正在尝试将citus data()用于Django

到目前为止,除了尝试保存已保存的模型外,其他大部分功能都正常工作:

NotSupportedError: modifying the partition value of rows is not allowed
这是因为django始终包含更新SQL中的每个字段,即使该字段没有更改

在Citus中,必须选择一个字段作为分区字段,然后不能更改它。所以,当我保存一个对象时,分区键不在update语句中,即使它没有改变


我知道您可以将
update\u字段
关键字arg传递给
save
方法,但我想知道是否可以告诉django在更新时不要包含字段?

django不提供“开箱即用”的此功能。您可以重写类的
save
方法,将分区字段以外的所有字段设置为
update\u字段的值

def save(self, **kwargs):
    kwargs.setdefault('update_fields', ['field1', 'field2'])
    return super(Class, self).save(**kwargs)
如果您不希望每次更改类的字段时都更新此方法,那么一个更动态的选项是使用API获取类的所有字段并排除分区字段

def save(self, **kwargs):
    kwargs.setdefault(
        'update_fields',
        [f.name for f in self.__class__._meta.get_fields() if f.name != 'partition_field']
    )
    return super(Class, self).save(**kwargs)
Django将尝试使用其他几种方法更新您的模型。也许所有模型继承的实现这些方法的基类都可以工作