我寫了一個視圖,在點擊時在儀表板上顯示打開、完成、接受和關閉的票證,進入特定的 URL 以相應地顯示票證,并根據他們的狀態切換模板,我正在查詢票證狀態,我得到以下資訊錯誤太多要解包的物件(預期為 2)
模型.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
視圖.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
uj5u.com熱心網友回復:
錯誤是由于此查詢...
Ticket.objects.filter('status')
您應該指定如下內容:
if Ticket.objects.filter(status='Opened'):
template_name = 'app/open_tickets.html')
另外請檢查邏輯。上面的查詢在 get_template_name 中沒有意義...您應該根據請求獲取一個模板。因此,如果請求是針對“已打開”的,那么您應該僅獲取“已打開”的模板。
假設如果您想獲取“已打開”,您需要在查詢中傳遞它并執行以下操作:
if self.request.GET.get('status', '') == 'Opened':
template_name = 'app/open_tickets.html')
uj5u.com熱心網友回復:
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')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/364060.html
標籤:姜戈 django 模型 django-views django-queryset 基于 Django 类的视图
