用返回覆盖保存模型 Django 保存方法

时间:2021-05-18 08:23:36

标签: python django model

我有这个函数,我想把它做成一个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。

1 个答案:

答案 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()
相关问题