Добавление данных в связанную таблицу из ссылки на странице
В моем приложении Django есть две модели:
Event
и Game
Модель Event
имеет ForeignKey к модели Game
.
У меня есть страница, на которой перечислены все игры с помощью {% for game in game_list %}
, и я пытаюсь создать кнопку, которая приведет меня к форме событий, чтобы я мог добавить событие к игре.
В форме события есть только 3 поля. project
, event_name
и event_date
. Когда вы попадаете на страницу формы события, я бы хотел, чтобы название проекта заполнялось названием игры с предыдущей страницы.
Но когда я создаю ссылку на форму, моя страница разрывается. Я использую:
<a class="dropdown-item" href="{% url 'add-event' game.id %}">Add Key Event</a>
отнести к форме мероприятия.
Модели
class Event(models.Model):
project = models.ForeignKey(Game, to_field='project_name', on_delete=models.CASCADE)
event_name = models.CharField(max_length=20)
event_date = models.DateTimeField(blank=True, null=True)
def __str__(self):
return str(self.event_name)
class Game(models.Model):
project_name = models.CharField(max_length=255, blank=False, unique=True)
project_website = models.URLField(max_length=255, blank=True)
project_description = models.TextField(blank=True)
def __str__(self):
return str(self.project_name)
Вид
def add_event(request,game_id):
event = Event.objects.get(pk=game_id)
form = addEventForm(request.POST or None, instance=event)
return render(request, 'pages/add_event.html', {'event': event, "form" : form})
URL
path('add_event/<game_id>', view=add_event, name="add-event"),
Ошибка
DoesNotExist at /apps/add_event/13
Event matching query does not exist.
Request Method: GET
Request URL: http://127.0.0.1:8000/apps/add_event/13
Django Version: 3.2.8
Exception Type: DoesNotExist
Exception Value:
Event matching query does not exist.
Я думаю, что проблема заключается в этой строке
event = Event.objects.get(pk=game_id)
Но я не уверен, что именно не так, возможно, представление ожидает чего-то другого, кроме game_id
Возможно, game_id на самом деле является строкой, поэтому попробуйте сначала преобразовать его в целое число. Другими словами, измените его на
event = Event.objects.get(pk=int(game_id))
или
path('add_event/<int:game_id>', view=add_event, name="add-event")
или оба.
Я думаю, что вы должны пересмотреть ваше представление примерно так, если это только для создания события:
def add_event(request):
form = addEventForm(request.POST or None)
if request.method == 'POST'
if event_form.is_valid():
event = event_form.save()
return render(request, 'pages/add_event.html', {'event': event, "form" : form})
Вы можете улучшить его для управления также обновлениями события:
def manage_event(request, event_id=0):
if event_id == 0:
# Create a new event: there is no instance yet of the event
form = addEventForm(request.POST or None)
else:
# Update an existing event, you can instantiate it
form = addEventForm(request.POST or None, instance=event)
if request.method == 'POST'
# You are posting either a creation or an update
if event_form.is_valid():
# If you need to add control before saving, you need to distinguish both like for the form creation
event = event_form.save()
return render(request, 'pages/add_event.html', {'event': event, "form" : form})