django - 使用 update_fields 保存不会影响任何行(更改类时)

标签 django inheritance

让我们有一个带有装饰器的模型:

def upgradable(model):
  @classmethod
  def upgrade(cls, base, **kwargs):
    base.__class__ = cls
    for attr, value in kwargs.items():
      setattr(base, attr, value)
    return base
  setattr(model, "upgrade", upgrade)
  return model

class Person(models.Model):
  name = models.CharField(max_length=50)
  def save(self, *args, **kwargs):
    self.name = self.name.upper()
    super(Person, self).save(*args, **kwargs)

和继承模型:

@upgradable
class User(Person):
  email = models.EmailField();

我正在尝试升级

person = Person.objects.get(...)
user = User.upgrade(person, email="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4d28352c203d21280d28352c203d2128632e2220" rel="noreferrer noopener nofollow">[email protected]</a>")
user.save()

但是出现错误:

Save with update_fields did not affect any rows.

super(Person, self).save(*args, **kwargs) 相关(在模型 person 的方法 save 中)

这并不完全错误,因为实际上我不想更改表 person 中的任何内容,我只想向表 user 添加一些内容(指向 person 和电子邮件的指针)。

那么如何跳过这个警告呢?

最佳答案

答案并不明显 - 我尝试添加

user.save(force_update = True)

但这不起作用。

但是

user.save(force_insert = True)

做好工作。奇怪,但有效。

关于django - 使用 update_fields 保存不会影响任何行(更改类时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243640/

相关文章:

c++ - 将对象指针转换为 char 数组

c++ - 理解虚函数

django - 将值呈现为文本而不是Django表单中的字段

django - 如何获取用户名而不是 ID?

grails - Grails 3.0.10 GORM继承

java - 基于另一个类创建一个类的实例

c++ - 自动创建 C++ 构造函数?

python - 如何在 Django 模型中使用枚举作为选择字段

python - Django 。简单的 FormView 不保存

python - 如何为相关对象创建自定义管理器?