让我们有一个带装饰的模型:
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)
相关(在模型人的方法保存中)
这不是完全错误的,因为我确实不想改变桌面用户的任何内容,我只想向桌面用户添加内容(指向人和电子邮件的指针)。
那么如何跳过此警告?
答案 0 :(得分:3)
答案并不明显 - 我试图添加
user.save(force_update = True)
但它不起作用。
但是
user.save(force_insert = True)
做好这份工作。奇怪,但有效。