我想用最少的代码保存对象。
视图中的(仅需要特定属性):
my_obj = Entry.create(name=my.name, ...)
模特中的:
@classmethod
def create(cls, **kwargs):
return cls(name=kwargs['name'], ...)
有没有办法缩短这段代码?提供你的例子。
答案 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)