用返回覆盖保存模型 Django 保存方法 [英] Override save model Django save method with return

查看:68
本文介绍了用返回覆盖保存模型 Django 保存方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个函数,我想把它做成一个Message模型类的方法.

I have this function, I want to make it a method of a Message model class.

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.

I've tried various ways, but still get errors. I need to return, expecially the id of the object saved.

@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.

this is the only way I made it work, but this is a work around... I get the errors in the Pyacharm IDE, I can not understand how to use the super() in this situation, because I want to pass an object and treat it in this method, not args and kwargs.

推荐答案

应该就是这么简单.只需覆盖模型的保存方法并在超级调用后返回实例.

It should be as simple as this. Simply override the save method of your model and return the instance after the super call.

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

您甚至可以使用此功能创建一个基本模型类,并在您想要的每个模型中使用它.

You can even make a base model class with this feature and use it in every model you want.

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

这篇关于用返回覆盖保存模型 Django 保存方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆