让我们有一个带有装饰器的模型:
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/