Python 从dict返回信息

Python 从dict返回信息,python,django,Python,Django,我想用最少的代码保存对象 视图中(只需要特定属性): my_obj = Entry.create(name=my.name, ...) @classmethod def create(cls, **kwargs): return cls(name=kwargs['name'], ...) 在型号中: my_obj = Entry.create(name=my.name, ...) @classmethod def create(cls, **kwargs): return

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

视图中(只需要特定属性):

my_obj = Entry.create(name=my.name, ...)
@classmethod
def create(cls, **kwargs):
    return cls(name=kwargs['name'], ...)
在型号中:

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()
),可以使用:

或未过滤:

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

Entry.objects.get_或_create(name=my.name,…)
;您可以从
models.py
中删除类方法;而且它已经足够短了。请描述一个实际问题,否则这更适合。@Burnkhalid:但是
model.objects.create()
还包括一个
实例.save()
调用。@MartiInputers“我想用最少的代码保存对象”。@Burnkhalid:但是他提供的示例代码没有使用
.save()
。因此,我们需要明确指出,两者之间存在差异。