假设我有models.py:
class Parent(models.Model):
name = models.CharField(max_length=20)
class child(models.Model):
name = models.CharField(max_length=20)
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
现在在“父母”的“详细信息”视图中,我列出了属于父母的孩子。
这个urls.py看起来像
path('parents/<int:pk>/, views.ParentDetailView.as_view(), name='parent-detail')
我会像这样在我的views.py中使用django DetailView
class ParentDetailView(DetailView):
model = Parent
现在在此详细信息视图中,我在模板中列出了带有parent_detail.html之类的父对象的子对象
{{parent}}
{% for child in parent.child_set.all %}
{{ child.name }}
{% endfor %}
但是我希望能够从此页面上的数据库中删除该子级,因此我将添加
{{parent}}
{% for child in parent.child_set.all %}
{{ child.name }}
<a href="{% url 'myapp:parent-delete-child" parent.pk child.pk %}">Delete child</a>
{% endfor %}
在这里我被卡住了! 我很想在我的urls.py
中添加类似的内容path('parents/<int:pk>/', views.ParentDetailView.as_view(), name='parent-detail'),
path('parents/<int:pk>/delete_child/<int:child_pk>/', views.ParentDeleteChildView.as_view(), name='parent-delete-child')
但是我不知道如何将pk和child_pk发送到通用django DeleteView吗?!?!?!
class ParentDeleteChildView(DeleteView):
model = Child
success_url = reverse_lazy('myapp:parent-detail' kwargs={'pk':pk})
删除后,我想返回到父详细信息页面。但是成功网址需要知道父级的pk。如何告诉通用视图删除与child_pk匹配的子项,然后转到与pk匹配的父级详细信息页面?我最好不要使用通用的DeleteView吗?
谢谢!
答案 0 :(得分:2)
我们可以使用get_success_url
中的django
来实现。
默认情况下,pk_url_kwarg
设置为kwarg pk
。但是在这种情况下,我们必须删除子对象,即child_pk
。因此,我们必须通过将pk_url_kwarg
覆盖为child_pk
来提及它。
class ParentDeleteChildView(DeleteView):
model = Child
pk_url_kwarg = 'child_pk'
def get_success_url(self):
success_url = reverse_lazy('myapp:parent-detail' kwargs={'pk':self.kwargs['pk']})
return success_url