【问题标题】:Override save model Django save method with return用返回覆盖保存模型 Django 保存方法
【发布时间】:2021-05-18 08:23:36
【问题描述】:

我有这个功能,我想把它做成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。

【问题讨论】:

  • 你能告诉我们你迄今为止尝试过的方法吗?
  • 什么错误?将错误的完整回溯添加到您的问题中。

标签: python django model


【解决方案1】:

应该就这么简单。只需覆盖模型的 save 方法并在 super 调用后返回实例。

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()

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2016-07-26
    相关资源
    最近更新 更多