Python 将参数传递给自定义save()方法
如何将参数传递给自定义save方法,保留适当的Python 将参数传递给自定义save()方法,python,django,django-models,Python,Django,Django Models,如何将参数传递给自定义save方法,保留适当的*args,**kwargs以传递给te super方法?我试着说: form.save(my_value) 及 但这似乎不起作用。我做错了什么 编辑:我找到了这个示例(请参阅最后一条消息,用于传递“reorder”): 这基本上就是我要做的,但是由于某种原因,my_value被认为是一个意外的参数。关键字参数必须跟在位置参数后面。请尝试以下方法: def save(self, my_value, *args, **kwargs): ..
*args
,**kwargs
以传递给te super方法?我试着说:
form.save(my_value)
及
但这似乎不起作用。我做错了什么
编辑:我找到了这个示例(请参阅最后一条消息,用于传递“reorder”):
这基本上就是我要做的,但是由于某种原因,
my_value
被认为是一个意外的参数。关键字参数必须跟在位置参数后面。请尝试以下方法:
def save(self, my_value, *args, **kwargs):
....
或:
您可以尝试以下方法 将“另存为”方法重写为:
def save(self, my_val, *args, **kwargs):
print my_val
# do_something here
return super(MyModel, self).save(*args, **kwargs)
MyModel.save(my_val="fooooo")
调用“另存为”方法时:
def save(self, my_val, *args, **kwargs):
print my_val
# do_something here
return super(MyModel, self).save(*args, **kwargs)
MyModel.save(my_val="fooooo")
这将打印my_val并保存。现有答案不完整
Model.save
的问题在于有多种方法可以实现它,尤其是通过Model.objects.create()
。querysetcreate()
调用不会向Model.save传递额外的参数,您的代码可能不会按预期运行
您可以在此处轻松查看create()
和其他方法(get\u或\u create、update\u或\u create)的源代码:
QuerySet的bulk\u create
方法根本不调用save
。这意味着任何自定义逻辑都将被完全忽略
由于这些风险,我会考虑这个问题的前提,避免一个反模式。不要重载内置的save方法,而是创建一个完全不同的(工厂)方法来包含您的特殊行为,例如mymodel.special\u save()
您正在展开save调用中的参数!似乎没有做到这一点——python说这是一个语法错误