2016-04-13 15 views
2

Bu sitedeki ilgili soruların yanıtlarıyla bile aşağıdaki sorunun çözülmemesini sağlayamıyorum.hatası. ValueError: temel 10 ile int() için geçersiz değişmez: ''

Şu anda Django öğreticisini yapıyorum ancak formda kaldım. aşağıdaki hata, bir favori şarkı göndererek whem i almak beni dinletiyor: Ben (örn selected_song = album.song_set.get(pk= int(request.POST['song'])) ve bir yanıtı bulmaya googledaarattın düşünebildiğim her şeyi denedim ama düzeltmek gibi olamaz

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

o. Herhangi bir yardım için minnettarım. Şablonunuzda

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

Lütfen istisnasının geri dönüşünü sağlayın. Ayrıca request.POST ['song'] 'için değerin ne olduğunu kontrol etmeye çalıştınız mı? –

+0

Görünümünüze boş bir değer gönderiliyor, bu nedenle "int" değerine yayınlanmaya çalışıyor. – cdvv7788

cevap

3

Eğer

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

{{song_id}} yapıyoruz bu durumda None olduğunu. {{song.id}}'u kullanmanız gerekir.

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

Yani boş bir dize '' sen dolayısıyla int hatayı aktarmaya çalıştığınız görünümünüze, geçirilir.

+0

EVET! Bunu denediğimi düşündüm. Çok teşekkür ederim! – tasstra

İlgili konular