Django Фильтр DetailView по двум параметрам, не использующим первичный ключ - PullRequest
0 голосов
/ 18 февраля 2020

Мне нужно отфильтровать модель по двум значениям, чтобы ни одно из них не являлось PK модели.

Я хочу отфильтровать платежи за определенную c машину и неделю, это означает, что я могу У меня более одного платежа за автомобиль и за неделю.

Я использую Django -Tables2 для отображения результатов.

просмотров. py

class PagosDetailView(SingleTableMixin, DetailView):

    template_name = "AC/paymentsbycarandweek.html"
    context_table_name = 'table'
    model = Pagos
    table_class = PagosTable
    slug_url_kwarg = 'carro_id'

    def get_queryset(self):
        qs = super(PagosDetailView, self).get_queryset()
        return qs.filter(carro=self.kwargs['carro'], semana=self.kwargs['semana'])

models.py

class Pagos(models.Model):

    carro = models.ForeignKey(
        Carros, on_delete=models.CASCADE, blank=False, null=False)
    pago = models.DecimalField(max_digits=6, decimal_places=2)
    fecha = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    semana = models.CharField(max_length=20)
    startweek = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    endweek = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    renta = models.ForeignKey(
        Renta, on_delete=models.PROTECT, blank=False, null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name_plural = "Pagos"

    def get_absolute_url(self):
        return reverse('pagos')

    def __str__(self):
        return self.semana

urls.py

path('paymentsbycarandweek/<int:carro>/<slug:semana>',
         views.PagosDetailView.as_view(), name='pagos_bycar')

This В последний раз, когда я пробовал несколько вариантов, я получаю следующее сообщение об ошибке:

Generi c подробный вид PagosDetailView должен вызываться либо с объектом pk, либо слагом в URLconf.

Как именно я могу передать эти два параметра?

1 Ответ

0 голосов
/ 19 февраля 2020

После долгих поисков я так и решил:

class PagosDetailView(SingleTableMixin, ListView):

    model = Pagos
    table_class = PagosDetailTable
    template_name = 'AC/paymentsbycarandweek.html'
    paginate_by = 10

    def get(self, request, *args, **kwargs):
        self.object_list = self.get_queryset()
        self.object_list = self.object_list.filter(
            carro=kwargs['carro'], semana=kwargs['semana'])

        context = self.get_context_data()
    return self.render_to_response(context)
...