我有这个函数,我想把它做成一个Message模型类的方法。
def save_message_to_db(message, message_id):
mex = Message(
message_id=message_id,
subject=message.subject,
sender=message.sender.address,
has_attachments=message.has_attachments,
sent_date=message.sent,
received_date=message.received
)
mex.save()
return mex
我尝试了各种方法,但仍然出现错误。我需要返回,特别是保存的对象的 id。
@staticmethod
def save_mex(message, message_id):
mex = Message(
message_id=message_id,
subject=message.subject,
sender=message.sender.address,
has_attachments=message.has_attachments,
sent_date=message.sent,
received_date=message.received
)
mex.save()
return mex
这是我让它工作的唯一方法,但这是一种解决方法...... 我在 Pyacharm IDE 中遇到错误,我无法理解在这种情况下如何使用 super(),因为我想传递一个对象并在此方法中处理它,而不是 args 和 kwargs。
答案 0 :(得分:2)
应该就这么简单。只需覆盖模型的保存方法并在超级调用后返回实例。
class YourModel(models.Model):
name = models.CharField(max_length=20)
def save(self, *args, **kwargs):
super(YourModel, self).save(*args, **kwargs)
return self
your_model_saved_instance = YourModel(name='Edoardo').save()
您甚至可以使用此功能创建一个基本模型类,并在您想要的每个模型中使用它。
class BaseModel(models.Model):
class Meta:
abstract = True
def save(self, *args, **kwargs):
super(BaseModel, self).save(*args, **kwargs)
return self
class YourModel(BaseModel):
name = models.CharField(max_length=20)
your_model_saved_instance = YourModel(name='Edoardo').save()