Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:DeleteView从ForeignKey传递参数';s模型以获取\u成功\u url_Python_Django - Fatal编程技术网

Python Django:DeleteView从ForeignKey传递参数';s模型以获取\u成功\u url

Python Django:DeleteView从ForeignKey传递参数';s模型以获取\u成功\u url,python,django,Python,Django,在用户删除了一个PieceInstance之后,我想将他重定向到PieceInstance所属的片段。我使用默认的DeleteView,并希望将工件id(工件通过ForeignKey引用的PieceInstance)传递给get_success_url方法self.piece.pk似乎无法获取对应工件的id 型号.py class PieceInstance(models.Model): id = models.UUIDField(primary_key=True, default=uu

在用户删除了一个PieceInstance之后,我想将他重定向到PieceInstance所属的片段。我使用默认的DeleteView,并希望将工件id(工件通过ForeignKey引用的PieceInstance)传递给get_success_url方法
self.piece.pk
似乎无法获取对应工件的id

型号.py

class PieceInstance(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular Piece across whole system')
    piece = models.ForeignKey('Piece', on_delete=models.SET_NULL, null=True) 
    ...

class Piece(models.Model):
    title = models.CharField(max_length=200)
    ...
class PieceInstanceDelete(LoginRequiredMixin, DeleteView):
    model = PieceInstance
    def get_success_url(self):
        return reverse_lazy('piece-detail', kwargs={'pk': self.piece.pk})
path('piece/<int:pk>', views.PieceDetailView.as_view(), name='piece-detail')
视图.py

class PieceInstance(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular Piece across whole system')
    piece = models.ForeignKey('Piece', on_delete=models.SET_NULL, null=True) 
    ...

class Piece(models.Model):
    title = models.CharField(max_length=200)
    ...
class PieceInstanceDelete(LoginRequiredMixin, DeleteView):
    model = PieceInstance
    def get_success_url(self):
        return reverse_lazy('piece-detail', kwargs={'pk': self.piece.pk})
path('piece/<int:pk>', views.PieceDetailView.as_view(), name='piece-detail')
url.py

class PieceInstance(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular Piece across whole system')
    piece = models.ForeignKey('Piece', on_delete=models.SET_NULL, null=True) 
    ...

class Piece(models.Model):
    title = models.CharField(max_length=200)
    ...
class PieceInstanceDelete(LoginRequiredMixin, DeleteView):
    model = PieceInstance
    def get_success_url(self):
        return reverse_lazy('piece-detail', kwargs={'pk': self.piece.pk})
path('piece/<int:pk>', views.PieceDetailView.as_view(), name='piece-detail')
path('piece/',views.PieceDetailView.as_view(),name='piece-detail')

根据源代码,对象在被删除之前存储在
self.object
中。因此,您可以使用以下命令重定向到相关
片段的主键:

class PieceInstanceDelete(LoginRequiredMixin, DeleteView):
    model = PieceInstance

    def get_success_url(self):
        return reverse_lazy('piece-detail', kwargs={'pk': self.object.piece_id})
使用以下答案获得:

这里是DeleteView类:

class PieceInstanceDelete(LoginRequiredMixin, DeleteView):
    model = PieceInstance
    def get_success_url(self):
        piece = self.object.piece
        return reverse_lazy('piece-detail', kwargs={'pk': piece.pk})

再次感谢威廉的澄清。你能告诉我你所说的未文档化是什么意思吗?@AaronScheib:我的意思是,
CreateView
UpdateView
拥有一个
对象
属性(),而
删除视图
,这意味着Django的开发者拥有“自由”以他们想要的方式实施。是的,现在这设置了一个
self.object
(),但是他们可以很容易地改变主意。@WillemVanOnsem谢谢你的帖子,这非常有帮助。我按照您的说明修补了
delete
函数,但一直出现以下错误:
DeleteView未返回HttpResponse对象。相反,它没有返回任何值。
结果表明,通过执行
delete
实际返回超级调用解决了问题。