Django在保存时从不更新列

2024-05-18 05:12:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将citus数据(https://www.citusdata.com/)与Django一起使用。在

到目前为止,除了尝试save一个已经保存的模型外,大多数工作都正常:

NotSupportedError: modifying the partition value of rows is not allowed

这是因为django总是在更新SQL中包含每个字段,即使该字段没有更改。在

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

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


Tags: the数据djangohttps模型comsavewww
1条回答
网友
1楼 · 发布于 2024-05-18 05:12:11

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

def save(self, **kwargs):
    kwargs.setdefault('update_fields', ['field1', 'field2'])
    return super(Class, self).save(**kwargs)

如果您不想在每次更改类的字段时都更新此方法,那么一个更为动态的选项是使用^{}API获取类的所有字段并排除分区字段

^{pr2}$

Django还可以使用其他几种方法来更新您的模型。也许所有模型从这些方法的实现中继承的基类可以工作

相关问题 更多 >