Я пытаюсь понять, почему явное указание аргументов подписи не работает, а просто слепо делает * args, ** kwargs работает! Я действительно не вижу большой разницы между этими двумя?
Пример, который не работает:
from django.db.models import CharField as _CharField
class CharField(_CharField):
def get_db_prep_value(self, value, connection, prepared=False):
if self.blank == self.null == self.unique == True and value == '':
value = None
return super(CharField, self).get_db_prep_value(value, connection, prepared) # <--- this does not work!
и я получаю следующую ошибку:
File "/home/googledroid/Workspace/eclipse/gameproject/virtualenv/lib/python2.6/site-packages/django/db/models/fields/__init__.py", line 276, in get_db_prep_save
return self.get_db_prep_value(value, connection=connection, prepared=False)
File "/home/googledroid/Workspace/eclipse/gameproject/virtualenv/lib/python2.6/site-packages/django/db/models/fields/subclassing.py", line 53, in inner
return func(*args, **kwargs)
File "/home/googledroid/Workspace/eclipse/gameproject/src/fields/__init__.py", line 13, in get_db_prep_value
return super(CharField, self).get_db_prep_value(value, connection, prepared)
File "/home/googledroid/Workspace/eclipse/gameproject/virtualenv/lib/python2.6/site-packages/django/db/models/fields/subclassing.py", line 53, in inner
return func(*args, **kwargs)
File "/home/googledroid/Workspace/eclipse/gameproject/virtualenv/lib/python2.6/site-packages/django/db/models/fields/subclassing.py", line 53, in inner
return func(*args, **kwargs)
TypeError: get_db_prep_value() got multiple values for keyword argument 'connection'
Хотя это работает просто отлично:
from django.db.models import CharField as _CharField
class CharField(_CharField):
def get_db_prep_value(self, value, *args, **kwargs):
if self.blank == self.null == self.unique == True and value == '':
value = None
return super(CharField, self).get_db_prep_value(value, *args, **kwargs)
В источнике django, django.db.models.subclassing.call_with_connection_and_prepared.inner()
, я вижу, что есть некоторое удаление kwargs, но не совсем уверен, почему?