Я новый кодер и очень плохо знаком с Django / Python. Я создаю приложение, которое объединяет результаты для гребной гонки. У меня есть следующие модели в models.py.
class Crew(models.Model):
name = models.CharField(max_length=50)
id = models.IntegerField(primary_key=True)
composite_code = models.CharField(max_length=10, blank=True, null=True)
club = models.ForeignKey(Club, related_name='crews',
on_delete=models.CASCADE)
rowing_CRI = models.IntegerField(blank=True, null=True)
rowing_CRI_max = models.IntegerField(blank=True, null=True)
sculling_CRI = models.IntegerField(blank=True, null=True)
sculling_CRI_max = models.IntegerField(blank=True, null=True)
event = models.ForeignKey(Event, related_name='crews',
on_delete=models.CASCADE)
status = models.CharField(max_length=20)
penalty = models.IntegerField(default=0)
handicap = models.IntegerField(default=0)
manual_override_minutes = models.IntegerField(default=0)
manual_override_seconds = models.IntegerField(default=0)
manual_override_hundredths_seconds = models.IntegerField(default=0)
bib_number = models.IntegerField(blank=True, null=True)
band = models.ForeignKey(Band, related_name='bands',
on_delete=models.CASCADE, blank=True, null=True)
@property
def raw_time(self):
if len(self.times.filter(tap='Start')) > 1 or len(self.times.filter(tap='Finish')) > 1:
return 0
start = self.times.get(tap='Start').time_tap
end = self.times.get(tap='Finish').time_tap
return end - start
@property
def race_time(self):
# The race time can include the penalty as by default it is 0
return self.raw_time + self.penalty*1000
@property
def event_band(self):
if not self.band:
return self.event.name
return str(self.event.name) + ' ' + str(self.band.name)
class RaceTime(models.Model):
sequence = models.IntegerField()
bib_number = models.IntegerField(blank=True, null=True,)
tap = models.CharField(max_length=10)
time_tap = models.BigIntegerField()
crew = models.ForeignKey(Crew, related_name='times',
on_delete=models.SET_NULL, blank=True, null=True,)
Я хочу создать два дополнительных свойства. Тот, который оценивает команду на race_time()
среди всех команд, и тот, который оценивает команды в пределах их event_band()
.
Вот моя первая попытка создать общий рейтинг как свойство под названием rank:
@property
def rank(self):
crews = Crew.objects.filter(status__in=('Accepted')).filter(race_time__isnull=False)
race_times = list(map(lambda crew: crew.race_time, crews)).sort()
rank = race_times.index(self.race_time) + 1
return rank
Этот код завершается с ошибкой:
Внутренняя ошибка сервера: / api / crews / Traceback (последний вызов был последним): файл "/Users/sianalcock/.local/share/virtualenvs/pairhead-results-3ZeqXKPg / lib / python3.7 / site-packages / django / core / handlers / exception.py ", строка 34, во внутреннем ответе = файл get_response (запрос)" /Users/sianalcock/.local/share/virtualenvs / pairhead-results-3ZeqXKPg / lib / python3.7 / site-packages / django / core / handlers / base.py ", строка 115, в _get_response response = self.process_exception_by_middleware (e, запрос) Файл" / Users / sianalcock "/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/core/handlers/base.py ", строка 113, в _get_response response = wrapped_callback (запрос, * callback_args, ** callback_kwargs) Файл "/ Users / sianalcock / .local / share / virtualenvs / pairhead-results-3ZeqXKPg / lib / python3.7 / site-packages / django / views / decorators / csrf.py ", строка 54, в wrapped_view, возвращают view_func (* args, ** kwargs)) Файл "/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/views/generic/base.py", строка 71, в представлении возвращает self. диспетчеризация (запрос, * args, ** kwargs) файл "/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest_framework/views.py", строка 505, в ответе об отправке = файл self.handle_exception (exc), файл "/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest_framework/views.py", строка 465, в handle_exception self.raise_uncaught_exception (exc) File "/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest_framework/views.py", строка 476, вподнять файл_unaught_exception "exc exc file" /Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg / lib / python3.7 / site-packages / rest_framework / views.py ", строка 502, в ответе об отправке = файл обработчика (запрос, * args, ** kwargs)" / Users / sianalcock / Development / pairhead-results / results / views.py ", строка 82, в ответе get return (serializer.data) # отправьте JSON клиентскому файлу" /Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7 / site-packages / rest_framework / serializers.py ", строка 757, в data ret = super (). Файл данных" /Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7 / site-packages / rest_framework / serializers.py ", строка 261, в данных self._data = self.to_representation (self.instance) Файл" /Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest_framework/serializers.py ", строка 675, в to_representation self.child.to_representation (item) для элемента в итерируемом файле" /Users/sianalcock/.local/share/virtualenvs/pairshead-Результаты-3ZeqXKPg / Библиотека / python3.7 / сайт-пакеты / rest_framework / serializers.py ", строка 675, в self.child.to_representation (item) для элемента в итерируемом файле" /Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages / rest_framework / serializers.py ", строка 513, в атрибуте to_representation = field.get_attribute (instance) File" /Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages / rest_framework / fields.py ", строка 443, в get_attribute возвращает get_attribute (экземпляр, self.source_attrs)Файл "/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest_framework/fields.py", строка 93, в get_attribute instance = getattr (instance, attr)Файл "/Users/sianalcock/Development/pairshead-results/results/models.py", строка 63, в ранге crews = Crew.objects.filter (status__in = 'Accepted'). Filter (race_time__isnull = False) Файл "/ Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/query.py ", строка 892, в фильтре возвращает self._filter_or_exclude (False, *args, ** kwargs) Файл "/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/query.py", строка 910,в файле _filter_or_exclude clone.query.add_q (Q (* args, ** kwargs)) "/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db / models / sql / query.py ", строка 1290, в предложении add_q, _ = файл self._add_q (q_object, self.used_aliases)" / Users / sianalcock / .local / share / virtualenvs / pairhead-results-3ZeqXKPg / lib / python3.7 / site-packages / django / db / models / sql / query.py ", строка 1318, в _add_q split_subq = split_subq, simple_col = simple_col, Файл "/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/sql/query.py", строка 1190, в поиске build_filter, parts, reffed_expression = Файл self.solve_lookup_type (arg) "/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/sqlqu.py ", строка 1049, в файле execute_lookup_type _, поле _, lookup_parts = self.names_to_path (lookup_splitted, self.get_meta ()) Файл" /Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/sql/query.py ", строка 1420, в names_to_path" Варианты:% s "% (name,", ".join (доступно))) django. core.exceptions.FieldError: Невозможно разрешить ключевое слово race_time в поле. Возможные варианты: band, band_id, bib_number, club, club_id, конкуренты, составной_код, событие, event_id, гандикап, id, manual_override_hundredths_seconds, manual_override_minutes, manual_override_seconds, имя, штраф, raw_time, rowing_CRI, rowing_CRI_maxIringing, CRI_max_CR__I_Im[30 / Sep / 2019 13:46:08] "GET / api / crews / HTTP / 1.1" 500 23531
Я даже здесь на правильных линиях?