【问题标题】:Django page not found when deleting object with foreign key (1 to many)使用外键删除对象时找不到 Django 页面(一对多)
【发布时间】:2017-07-14 22:45:35
【问题描述】:

这是我第一次尝试使用外键删除对象。这些模型具有一对多的关系:

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 和 Sounds 的视图如下所示:

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/,并出现错误“没有声音与给定的查询匹配。”(看起来好吧我)。最难理解发生了什么,任何帮助表示赞赏!

【问题讨论】:

    标签: python django django-models foreign-keys delete-file


    【解决方案1】:

    我认为 8 是错误的 ID。它是 NumObject id 而不是 Sounds id。您没有将sounds_set 传递给sounds_detail.html 页面。

    尝试以下方法:

    1) 更改您的模板,改为包含带有传递变量的 sound_detail:

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

    2)在sound_detail页面,将链接改为:

    &lt;a href="/{{sound.id}}/delete/"&gt;Delete&lt;/a&gt;

    让我知道这是否有效!

    【讨论】:

    • 感谢您的回复,会试用并回复您
    • 你是最棒的。解决了我的问题。谢谢!
    • 很高兴我能帮上忙。
    猜你喜欢
    • 2019-04-12
    • 1970-01-01
    • 2020-10-27
    • 2017-04-07
    • 2017-04-28
    • 2018-04-20
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    相关资源
    最近更新 更多