2017-07-14 30 views
0

這是我第一次嘗試使用外鍵刪除對象。該機型有1一對多的關係:使用外鍵刪除對象時找不到Django頁面(1到多個)

class NumObject(models.Model): 
    title= models.CharField(max_length=50) 
    number= models.IntegerField() 
    ident= models.IntegerField() 
    usersave= models.CharField(max_length=100, blank= True) 


    def __str__(self): 
     return self.title 

    def save(self, *args, **kwargs): 
     super(NumObject,self).save(*args,**kwargs) 

    def get_absolute_url(self): 
     return reverse('posts:detail', kwargs={'id': self.id}) 

class Sounds(models.Model): 
    numobj = models.ForeignKey(NumObject) 
    title = models.CharField(max_length=50) 
    sound = models.FileField() 

    def __str__(self): 
     return self.title 

    def get_absolute_url(self): 
     return reverse('posts:detail', kwargs={'title': self.title}) 

的NumObject和聲音的觀點是這樣的:

def post_detail(request,id= None): 
    instance= get_object_or_404(NumObject, id=id) 

    context= { 
     'title': instance.number, 
     'instance': instance, 



} 
    return render(request,'post_detail.html',context) 

def sound_detail(request,id= None): 
    instancesound= get_object_or_404(Sounds, id=id) 


    context= { 
     'sound': instance.number, 
     'instancesound': instancesound, 
} 
    return render(request,'sound_detail.html',context) 
在我的模板

,我能夠顯示所有的「聲音」相關聯的對象通過這樣做一個「NumObject」對象:

{% for obj in instance.sounds_set.all %} 
{% include 'sound_detail.html' %}  
{% endfor %} 

sound_detail.html具有顯示所有的聲音對象的UL,以及到刪除視圖的鏈接對每個聲音對象:

<a href="/{{instance.id}}/delete/">Delete</a> 

進行刪除查看URL看起來是這樣的:

url(r'^(?P<id>\d+)/delete/$', views.post_delete, name= 'delete'), 

和刪除視圖:

def post_delete(request, id): 
    sound= get_object_or_404(Sounds, pk=id).delete() 

    return redirect('posts:list') 

出於某種原因,當我嘗試刪除個人 「聲音」對象,我收到請求URL爲http://127.0.0.1:8000/8/delete/的「找不到頁面」,並且出現「沒有聲音與給定查詢匹配」的錯誤(這看起來沒有問題)。經歷最困難的時間試圖瞭解發生了什麼,任何幫助表示讚賞!

回答

1

我認爲8是錯誤的ID。這是NumObject ID而不是聲音ID。您沒有將sounds_set傳遞到sounds_detail.html頁面。

嘗試以下操作:

1)更改模板,而不是包括與傳遞的變量sound_detail:

{% include 'sound_detail.html' with sound=obj %}

2)在sound_detail頁面,更改鏈接:

<a href="/{{sound.id}}/delete/">Delete</a>

讓我知道,如果這有效!

+0

感謝您的回覆,將試用並回復給您 –

+0

您是最棒的。解決了我的問題。謝謝! –

+0

很高興我能幫到你。 –