从dict返回信息

时间:2014-03-10 11:19:09

标签: python django

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

视图中的

(仅需要特定属性):

my_obj = Entry.create(name=my.name, ...)
模特中的

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

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

1 个答案:

答案 0 :(得分:2)

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

@classmethod
def create(cls, **kwargs):
    return cls(**{k: kwargs[k] for 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 kwargs.viewkeys() & cls._meta.get_all_field_names()})

或未经过滤:

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