Запрос задает слишком много объектов для распаковки ожидается(2) в django templateView

Я написал представление для показа открытых, завершенных, принятых и закрытых тикетов на приборной панели, при нажатии на которое происходит переход на определенный url для отображения тикетов соответственно и переключение шаблонов в зависимости от их статуса, я запрашиваю статус тикета и получаю следующую ошибку too many objects to unpack (expected 2)

models.py

class Ticket(models.Model):
    ticket_title = models.CharField(max_length=200)
    ticket_description = models.TextField()
    created_by = models.ForeignKey(User,related_name = 'created_by',blank=True,null=True,on_delete=models.CASCADE)

    STATUS_CHOICES = (
        ('Opened','Opened'),
        ('Accepted','Accepted'),
        ('Completed','Completed'),
        ('Closed','Closed')
    )

    status = models.CharField('Status',choices=STATUS_CHOICES,max_length = 100,default = 'Opened')

    closed_date = models.DateTimeField(blank=True,null=True)
    completed_date = models.DateTimeField(blank=True,null=True)
    accepted_date = models.DateTimeField(blank=True,null=True)
    opened_date = models.DateTimeField(blank=True,null=True)
    

    accepted_by = models.ForeignKey(User,related_name='assigned_to',on_delete=models.CASCADE,blank=True,null=True)

    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)


    def __str__(self):
        return self.ticket_title

Views.py

class DeveloperTicketView(TemplateView):
  

def get_template_names(self):
    ticket_type = Ticket.objects.filter('status')
    if ticket_type == "Opened":
        template_name = 'app/open_tickets.html'
    elif ticket_type == 'Accepted':
        template_name = 'app/dev_accepted_ticket.html'
    elif ticket_type == 'Completed':
        template_name = 'app/dev_completed_tickets.html'
    else:
        template_name = 'app/dev_closed_tickets.html'
    return template_name


def get_context_data(self, **kwargs):
    context =  super(TemplateView,self).get_context_data(**kwargs)
    context['open_tickets'] = Ticket.objects.filter(status = 'Opened')
    context['accepted_tickets'] = Ticket.objects.filter(status = 'Accepted',accepted_by = self.request.user)
    context['completed_tickets'] = Ticket.objects.filter(status = 'Completed',accepted_by = self.request.user)
    context['closed_tickets'] = Ticket.objects.filter(status = 'Closed',accepted_by = self.request.user)
    return context

Ошибка связана с этим запросом...

Ticket.objects.filter('status')

Вы должны указать что-то вроде:

if Ticket.objects.filter(status='Opened'):
    template_name = 'app/open_tickets.html')

Также, пожалуйста, проверьте логику. Вышеприведенный запрос не имеет смысла в get_template_name... Вы должны получить один шаблон в соответствии с запросом. Так, если запрос 'opened', то вы должны получить шаблон только для 'opened'.

Предположим, если вы хотите получить для 'opened', вам нужно передать его в запросе и сделать следующее:

if self.request.get('status') == 'Opened':
    template_name = 'app/open_tickets.html')
def show_ticket(request,status):
    if status.title() in ['Opened','Accepted','Completed','Closed']:

        if status.title() == 'Opened':
            tickets = Ticket.objects.filter(status='Opened')
        else:
            tickets = Ticket.objects.filter(status=status.title(),accepted_by=request.user)
        templates = {'Opened':'app/open_tickets.html','Accepted':'app/dev_accepted_ticket.html','Completed':'app/dev_completed_tickets.html','Closed':'app/dev_closed_tickets.html'}
        return render(request,templates[status.title()],{'tickets':tickets})

внутри вашего urls.py

path('tickets/<str:status>/',views.show_ticket,name='show_ticket')

Вернуться на верх