#python #django #django-models #django-views
#python #django #django-модели #django-представления
Вопрос:
В моем (базовом) приложении для фэнтези-футбола, которое я создаю, каждый игрок / позиция представлены отдельным объектом модели. Вот так. Вот одна из таких моделей / позиций.
class Quarterback(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=20, blank=True)
У меня также есть модель «Команда», которая содержит информацию о названии команды, пользователе и игроках в команде. Основная цель этого объекта заключается в том, что я хочу отобразить список всех пользователей и их команд и общий балл их команды, чтобы каждый пользователь мог видеть, как все остальные набирают очки.
class Team(models.Model):
team_name = models.CharField(max_length=255, blank=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
quarter_back = models.ForeignKey(Quarterback, on_delete=models.CASCADE, null=True)
running_back = models.ForeignKey(Runningback, on_delete=models.CASCADE, null=True)
wide_receiver = models.ForeignKey(Widereceiver, on_delete=models.CASCADE, null=True)
tight_end = models.ForeignKey(Tightend, on_delete=models.CASCADE, null=True)
kicker = models.ForeignKey(Kicker, on_delete=models.CASCADE, null=True)
Проблема, с которой я сталкиваюсь, заключается в присвоении общего балла. То, что я пытаюсь сделать, это сравнить имена игроков в команде со списком игроков и результатов, которые я извлек из api. Давайте назовем это «player_data». Если игрок в объекте Team находится в объекте player_data, я могу затем присвоить оценку игрока переменной с именем «totalscore», подсчитать ее, отобразить в моем шаблоне и т.д. Но у меня возникли проблемы с запросом отдельного объекта Team.
Моей первой мыслью было создать функцию в views.py и передайте идентификатор объекта команды. Что-то вроде этого.
def teamscores(request, id):
team = Team.objects.get(id=id)
С таким URL-адресом, как этот.
path('teamscores/<int:id>', views.teamscores, name="teamscores")
Однако я получаю ошибку 404, потому что, похоже, я не могу правильно получить идентификатор объекта. Я думаю, что моя проблема связана с запросом, который я использую, но я действительно не знаю. Я был бы очень признателен за мнение об этом со стороны.
Ответ №1:
попробуйте использовать pk вместо id в вашем запросе и URL
Ответ №2:
Вы можете использовать get_object_or_404
так:
from django.shortcuts import get_object_or_404
from .models import Team
def teamscores(request, team_id):
team = get_object_or_404(Team, pk=team_id)
или, если вы этого не хотите, вам следует использовать pk
:
team = Team.objects.get(pk=team_id)
Вы используете id
в своем коде, но это встроенная функция в python, поэтому вы должны изменить ее urls.py
и в своем:
path('teamscores/<int:team_id>', views.teamscores, name="teamscores")
Комментарии:
1. Спасибо за ваше предложение. По-прежнему не работает, но если я передам идентификатор объекта вручную в функцию, это сработает.
2. Да, хорошо, не было необходимости в миграции, поскольку в модели не было изменений.
3. Вы попали по правильному URL-адресу? потому что вы говорите, что функция работает нормально, когда вы передаете идентификатор вручную.
4. Но проблема в том, что мне нужно, чтобы он автоматически получал идентификатор. Вводить идентификатор вручную бесполезно. Как функция views может автоматически получать идентификатор всех / любого из моих объектов?
5.
id
это встроенная функция в python, поэтому вам нужно изменить имя, извините, не видел этого 🙂