Skip to main content
 首页 » 编程设计

python之在 Django 中提交表单时出错。值错误 : invalid literal for int() with base 10: ''

2024年08月23日23findumars

即使在本网站上找到相关问题的答案,我也无法解决以下问题。

目前我正在学习 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 因此出现错误。