django基于价值传递论据

时间:2014-08-16 07:48:07

标签: python django

我在django模型中定义了可选变量。在我看来,我可能有这些值,或者它们可能是无。我想创建该对象而不必担心向django模型发送None参数。

例如,Book对象具有标题,但发布者是可选的。

现在我认为我正在做类似

的事情
if publisher is None:
    Book.objects.create(title=title)
else:
    Book.objects.create(title=title, publisher=publisher)

如果有多个可选字段,现在这是不可管理的。解决方案是什么?

3 个答案:

答案 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执行类似的操作。看看这个:

Passing a list of 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)