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

时间:2016-10-25 15:14:02

标签: 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="example@example.com")
user.save()

但错误出现了:

Save with update_fields did not affect any rows.

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

这不是完全错误的,因为我确实不想改变桌面用户的任何内容,我只想向桌面用户添加内容(指向人和电子邮件的指针)。

那么如何跳过此警告?

1 个答案:

答案 0 :(得分:3)

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

user.save(force_update = True)

但它不起作用。

但是

user.save(force_insert = True)

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