Добавление данных в связанную таблицу из ссылки на странице

В моем приложении 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})
Вернуться на верх