Django DetailView通过不使用主键的两个参数进行筛选
我需要用两个值过滤模型,它们都不是模型的主键 我想过滤一辆车和一周的付款,这意味着我可以在一周内为一辆车支付多笔付款 我使用Django-Tables2来显示结果 views.py models.py url.pyDjango DetailView通过不使用主键的两个参数进行筛选,django,django-models,django-views,django-urls,Django,Django Models,Django Views,Django Urls,我需要用两个值过滤模型,它们都不是模型的主键 我想过滤一辆车和一周的付款,这意味着我可以在一周内为一辆车支付多笔付款 我使用Django-Tables2来显示结果 views.py models.py url.py path('paymentsbycarandweek/', views.PagosDetailView.as_view(),name='pagos_bycar') 这是我最后一次尝试几个选项,我收到以下错误消息: 通用详细信息视图PagosDetailView必须在URLconf中
path('paymentsbycarandweek/',
views.PagosDetailView.as_view(),name='pagos_bycar')
这是我最后一次尝试几个选项,我收到以下错误消息:
通用详细信息视图PagosDetailView必须在URLconf中使用对象pk或slug调用
如何准确地传递这两个参数?经过大量搜索,我最终解决了这个问题:
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)
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
path('paymentsbycarandweek/<int:carro>/<slug:semana>',
views.PagosDetailView.as_view(), name='pagos_bycar')
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)