Я пытаюсь написать представление на основе классов из уже отфильтрованного представления. Однако я не смог выяснить, как передать аргументы в CBV.
Я использую django 3.0.4 с pipenv python 3.8
в качестве примера, предположим, у меня есть 2 модели:
class Customer(models.Model):
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
email = models.EmailField()
class WorkOrder(models.Model):
date_created = models.DateField('Date', default=datetime.now)
due_date = models.DateField('Due Date')
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, verbose_name='Customer')
STATUS_CHOICES = [
('pending', 'Pending'),
('approved', 'Approved'),
('completed', 'Completed'),
('cancelled', 'Cancelled'),
]
status = models.CharField('Status of the work order', max_length=10, choices=STATUS_CHOICES, default='pending')
description = models.TextField('Description of the work')
Я написал FBV для перечисления рабочих заказов клиента, отфильтрованных по статусу. Примерно так:
def customer_workorders(request, pk):
customer = CustomUser.objects.get(pk=pk)
pending_workorders = WorkOrder.objects.filter(customer=pk).filter(status='pending')
approved_workorders = WorkOrder.objects.filter(customer=pk).filter(status='approved')
completed_workorders = WorkOrder.objects.filter(customer=pk).filter(status='completed')
cancelled_workorders = WorkOrder.objects.filter(customer=pk).filter(status='cancelled')
context = {
'customer': customer,
'pending': pending_workorders,
'approved': approved_workorders,
'completed': completed_workorders,
'cancelled': cancelled_workorders
}
return render(request, 'reports/cusomer_workorders.html', context)
Я пытаюсь составить список CBV для каждого заказа на работу в соответствии с его статусом.
Я знаю, что мое представление на основе классов должно быть таким
class CustomerWorkOrderPendingView(LoginRequiredMixin, ListView):
template_name = 'reports/customer_workorders_list.html'
def get_queryset(self):
return WorkOrder.objects.filter(customer=customer).filter(status='pending')
Мой вопрос: как я могу получить объект клиента в соответствии с этим CBV? В более общем смысле, как я могу передать аргумент, чтобы сделать запрос с ним в CBV.
Я знаю, что могу передать переменную типа
{% url 'to_some_view' variable %}
, а в FBV я могу получить переменную
def a_view(request, variable):
some logic with variable
Как я могу это сделать в CBV?
Спасибо за ваше время.