Django:DeleteView从ForeignKey的模型传递参数以获取\u success\u

2024-09-30 08:14:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在用户删除了一个PieceInstance之后,我想将他重定向到PieceInstance所属的片段。我使用默认的DeleteView,并希望将Piece 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)
    ...

视图.py

^{pr2}$

网址.py

path('piece/<int:pk>', views.PieceDetailView.as_view(), name='piece-detail')

Tags: 用户pyidtruegetpiecemodelmodels
2条回答

用这个答案就知道了: DeleteView with a dynamic success_url dependent on 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})

根据源代码,对象存储在self.object中,然后将其删除。因此您可以重定向到相关的piece的主键,方法是:

class PieceInstanceDelete(LoginRequiredMixin, DeleteView):
    model = PieceInstance

    def get_success_url(self):
        return reverse_lazy('piece-detail', kwargs={'pk': self.object.piece_id})

然而,问题是这是一个未记录的视图,因此Django视图有可能在没有这种行为的情况下被重写。在

如果这种行为不再发生,可能需要修补delete函数:

^{pr2}$

相关问题 更多 >

    热门问题