2016-04-13 13 views
2

Ich kann das folgende Problem nicht lösen, auch nicht mit den Antworten auf verwandte Fragen auf dieser Seite.Fehler beim Senden des Formulars in Django. ValueError: ungültiges Literal für int() mit der Basis 10: ''

Im Moment mache ich das Django-Tutorial, bin aber mit dem Formular festgefahren. Der folgende Fehler, dass ich bekommen whem ein Lieblingslied einreichen, wird mich nervt:

ValueError: invalid literal for int() with base 10: '' 

ich alles habe ich versucht, von (zB selected_song = album.song_set.get(pk= int(request.POST['song'])) einfiel und gegoogelt Suche nach einer Antwort, aber ich kann nicht zu beheben scheinen es. Ich schätze jede Hilfe.

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> 

views.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}) 
+0

Bitte geben Sie den Trackback Ihrer Ausnahme an. Haben Sie auch versucht zu überprüfen, was der Wert für 'request.POST ['song']' 'ist? –

+0

Ein leerer Wert wird an Ihre Ansicht gesendet, sodass versucht wird, '' auf einen int zu übertragen. – cdvv7788

Antwort

3

in Ihrer Vorlage Sie

<input type = "radio" id = "song{{ forloop.counter }}" name = "song" value = "{{ song_id }}" /> 

{{song_id}} tun, ist None in diesem Fall. Sie müssen {{song.id}} verwenden.

<input type = "radio" id = "song{{ forloop.counter }}" name = "song" value = "{{ song.id }}" /> 

So eine leere Zeichenkette '' wird Ihrer Ansicht übergeben, die Sie int daher den Fehler zu passieren versuchen.

+0

JA !! Ich dachte, ich hätte es versucht. Vielen Dank! – tasstra

Verwandte Themen