即使在本网站上找到相关问题的答案,我也无法解决以下问题。
目前我正在学习 Django 教程,但被表单卡住了。 以下错误困扰着我:
ValueError: invalid literal for int() with base 10: ''
我尝试了所有我能想到的方法(例如 selected_song = album.song_set.get(pk= int(request.POST['song']))并用谷歌搜索寻找答案,但我可以似乎已修复它。感谢任何帮助。
detail.html
<form action="{% url 'music:favorite' album.id %}" method = "post">
{% csrf_token %}
{% for song in album.song_set.all %}
<input type = "radio" id = "song{{ forloop.counter }}" name = "song" value = "{{ song_id }}" />
<label for="song{{ forloop.counter }}">
{{ song.song_title }}
{% if song.is_favorite %}
<img src="http://http://i.imgur.com/b9b13Rd.png" />
{% endif %}
</label><br>
{% endfor %}
<input type="submit" value="Favorite">
</form>
View .py
def favorite(request, album_id):
album = get_object_or_404(Album, pk = album_id)
try:
selected_song = album.song_set.get(pk= int(request.POST['song']))
except (KeyError, Song.DoesNotExist):
return render(request, 'music/detail.html', {
'album':album,
'error_message': "You didn't select a valid song"
})
else:
selected_song.is_favorite = True
selected_song.save()
return render(request, 'music/detail.html', {'album': album})
请您参考如下方法:
在你的模板中你正在做
<input type = "radio" id = "song{{ forloop.counter }}" name = "song" value = "{{ song_id }}" />
{{song_id}} 在这种情况下是 None。您需要使用 {{song.id}}。
<input type = "radio" id = "song{{ forloop.counter }}" name = "song" value = "{{ song.id }}" />
因此一个空白字符串 '' 被传递给您的 View ,而您正试图将其传递给 int 因此出现错误。
