我想用最少的代码保存对象。
在 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/