Я программирую очень простое приложение для хранения результатов футбольных матчей, и я застрял со следующей проблемой. При запуске одного из модульных тестов, следующий код:
listCompetition = Competition.objects.filter(compId=competitionId)
if len(listCompetition) == 0:
#some code here
else:
#some code here
выдает следующую ошибку:
File "C:\Users\admin\workspace\project\src\bla\bla\module.py", line 222, in getMatches
if len(listCompetition) == 0:
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 82, in __len__
self._result_cache = list(self.iterator())
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 286, in iterator
obj = model(*row[index_start:aggregate_start])
TypeError: __init__() takes exactly 3 arguments (4 given)
Однако, если я подставлю первую строку кода следующим образом:
listCompetition = list(Competition.objects.filter(compId=competitionId))
тогда отлично работает. Почему он ведет себя так странно? Как получается, что Django передает 4 параметра, если я определил только два в конструкторе класса Competition? Если это поможет, вот определение модели для класса Competition:
class Competicion(MultiName):
def __init__(self, canonicalName, compId):
super(Competition, self).__init__(canonicalName, compId)
class MultiName(models.Model):
entId = models.CharField(null=True, max_length=25);
canonicalName = models.CharField(max_length=50, primary_key=True);
def __init__(self, canonicalName, entId=None):
super(MultiName, self).__init__()
self.canonicalName = canonicalName;
self.entId = entId;
Большое спасибо.