2

特定のクライアントからレポートを削除しようとしているので、現在url.py、クライアント ID とレポート ID を渡して、クライアント X からレポート Y を削除したいと考えていますdef ReportScheduleDeleteView(request):。 -ベースの DeleteView。

私は見ましthis exampleたが、自分のコードに溶け込むことができませんでした。

だからここに私のコードがあります。

urls.py

url(r'^jsclient/(?P<pk>\d+)/report/(?P<r_pk>\d+)/delete/$', ReportScheduleDeleteView.as_view(), name="report-delete"),

models.py -

class JSClient(models.Model):
    name = models.CharField(max_length=255, unique=True)
    clientAccount = models.CharField(max_length=255)
    ....

class ReportSchedule(models.Model):
    client = models.ForeignKey(JSClient)
    schedRepName = models.CharField(max_length=255)
    reportType = models.CharField(max_length=255, choices=REPORT_TYPE)
    ....

views.py :

class ReportScheduleDeleteView(DeleteView):   
    model = ReportSchedule
    template_name = "report/report_confirm_delete.html"
    success_url = lazy(reverse, str)('jsclient-list')

クラスベースのDeleteViewを使用してこれを行う方法があるに違いないと確信しています。これに関するヘルプは大歓迎です。

4

2 に答える 2

6

からのヒントのおかげEsseTiCCBV site、問題の解決策を見つけることができました。一目瞭然だったかも

class ReportScheduleDeleteView(DeleteView):
    model = ReportSchedule
    template_name = "report/report_confirm_delete.html"
    success_url = lazy(reverse, str)('jsclient-list')

    # Get the parameters passed in the url so they can be used in the 
    # "report/report_confirm_delete.html"     


**UPDATE:**

    def get_object(self, queryset=None):
        if queryset is None:
            queryset = self.get_queryset()

        client = self.kwargs['pk']
        report = self.kwargs['rpk']

        queryset = ReportSchedule.objects.filter(client_id=client, id=report)

        if not queryset:
            raise Http404

        context = {'client_id':client, 'report_id':report}
        return context

    # Override the delete function to delete report Y from client X
    # Finally redirect back to the client X page with the list of reports
    def delete(self, request, *args, **kwargs):
        client = self.kwargs['pk']
        report = self.kwargs['rpk']

        clientReport = ReportSchedule.objects.filter(client_id=client, id=report)
        clientReport.delete()

        return HttpResponseRedirect(reverse('report-list', kwargs={'pk': client}))

それが誰かに役立つことを願っています。

于 2013-05-17T13:25:13.773 に答える