我在django模型中定义了可选变量。在我看来,我可能有这些值,或者它们可能是无。我想创建该对象而不必担心向django模型发送None参数。
例如,Book对象具有标题,但发布者是可选的。
现在我认为我正在做类似
的事情if publisher is None:
Book.objects.create(title=title)
else:
Book.objects.create(title=title, publisher=publisher)
如果有多个可选字段,现在这是不可管理的。解决方案是什么?
答案 0 :(得分:0)
如何使用**
运算符:
attrs = {'title': title}
if publisher is not None:
attrs['publisher'] = publisher
Book.objects.create(**attrs)
更新替代方案 - 使用Model.save
:
book = Book(title='title')
if publisher is not None:
book.publisher = publisher
book.save()
答案 1 :(得分:0)
看看这个:
Call a function with argument list in python
基本上创建一个类似args
的数组,然后将其作为*args
传递给所需的方法。
您也可以使用**kwargs
执行类似的操作。看看这个:
答案 2 :(得分:0)
分支其他答案...试试这个
def make_book(**kwargs):
query = {key: value for key, value in kwargs.items() if value}
Book.objects.create(**query)
我建议将此声明为模型管理器上的一种方法,以便您可以快速制作需要它们的实例,例如
Book.objects.make_book(title="The Title",publisher=None)