Атрибут действия в html теге формы не отправляет данные в django - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу отправить song.id из каждой песни в модели альбома, но каждый раз, когда я отправляю ее, я получаю A KeyError

Это то, что я написал подробно. html

{% if error_message %}
    <p><strong>{{ error_message }}</strong></p>
{% endif %}

<form action="{% url 'music:favorite' album.id %}">
    {% csrf_token %}
    {% for song in album.song_set.all %}
        <input type="radio" id="song{{ song.id }}" name="song" value="{{ song.id }}">
        <label for="song{{ song.id }}">
            {{ song.song_title }}
            {% if song.is_favorite %}
                <img src="https://png.pngtree.com/png-vector/20190726/ourmid/pngtree-cute-light-star-with-black-frame-png-image_1633374.jpg">
            {% endif %}
        </label>
        <br>
    {% endfor %}
    <input type="submit" value="Favorite">
</form>

Это мои views.py

def favorite(request, album_id):
album = get_object_or_404(Album, pk=album_id)
try:
    selected_song = album.song_set.get(pk=request.POST['song'])
except (KeyError, Song.DoesNotExist):
    return render(request, 'music/detail.html', {
        'album':album,
        'error_message':"You did not select a valid song",
        })
else:
    selected_song.is_favorite = True
    selected_song.save()
    return render(request, 'music/detail.html', {'album':album})

1 Ответ

0 голосов
/ 08 апреля 2020

Я отвечаю на свой вопрос. Поэтому в теге формы мне пришлось включить атрибут метода и установить его в POST.

Изменить

<form action="{% url 'music:favorite' album.id %}">

На

<form action="{% url 'music:favorite' album.id %}" method="POST">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...