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()
。因此,我们需要明确指出,两者之间存在差异。