python - 从 dict 返回信息

标签 python django

我想用最少的代码保存对象。

在 View 中(仅需要特定属性):

my_obj = Entry.create(name=my.name, ...)

在模型中:

@classmethod
def create(cls, **kwargs):
    return cls(name=kwargs['name'], ...)

有没有办法缩短这段代码?提供您的示例。

最佳答案

您可以通过以下方式使其更加通用:

@classmethod
def create(cls, **kwargs):
    return cls(**{k: kwargs[k] for k in kwargs.viewkeys() & cls._meta.get_all_field_names()})

它将关键字参数过滤为仅包含字段的参数。

或者只是相信没有额外的关键字参数被传入并使用:

@classmethod
def create(cls, **kwargs):
    return cls(**kwargs)

如果您还想保存新创建的对象(my_obj.save()),您可以使用 model.objects.create() method :

@classmethod
def create(cls, **kwargs):
    return cls.objects.create(**{k: kwargs[k] for k in kwargs.viewkeys() & cls._meta.get_all_field_names()})

或未过滤:

@classmethod
def create(cls, **kwargs):
    return cls.objects.create(**kwargs)

关于python - 从 dict 返回信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22298695/

相关文章:

python - Matplotlib 绘制 numpy.matrix 类型的奇怪行为

python - 类型错误 : got multiple values for argument when passing in *args

python - Django '<object> matching query does not exist' 当我在数据库中看到它时

python - nltk:使用自定义特征集进行文本分类

python - 使用 pip 列出包的依赖项

python - 求最小差平方和的算法

python - Django Web App 通过 Heroku Connect 与 Salesforce 集成

python - Django Tastypie 创建 API 接受 POST 数据但不在数据库中创建任何条目

django - 如何防止 Django 解释包含弯引号的 block ?

javascript - GeoDjango - 外键的传单显示弹出窗口