Фильтровать / отображать элементы на основе выбранной категории - PullRequest
0 голосов
/ 24 февраля 2019

Я все еще новичок в Django, и я застрял с одной проблемой.Я построил модели, как определено ниже:

# models.py

from django.db import models
from bifrost.models import CustomUser
from django.urls import reverse

# Create your models here.


# Model Projektu
class Project(models.Model):
    PROJECT_TYPE = (
        ('Scrum', 'Scrum'),
        ('Kanban', 'Kanban'),
    )
    project_key = models.CharField(max_length=8)
    project_name = models.CharField(max_length=160)
    project_type = models.CharField(max_length=10, choices=PROJECT_TYPE)
    project_lead = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True, blank=True)
    project_date_created = models.DateField(null=True, blank=True)


    def __str__(self):
        return self.project_name

    def get_absolute_url(self):
        return reverse('project-detail', args=[str(self.id)])

class Issue(models.Model):
    ISSUE_PRIORITY = (
        ('C', 'Critical'),
        ('H', 'High'),
        ('M', 'Medium'),
        ('L', 'Low'),
    )
    issue_type = models.TextField(default='Issue', editable=False)
    issue_id = models.IntegerField(primary_key=True)
    issue_date_created = models.DateField()
    issue_date_updated = models.DateField(null=True, blank=True)
    issue_project = models.ForeignKey(Project, on_delete=models.CASCADE)
    issue_title = models.TextField()
    issue_description = models.TextField(null=True, blank=True)
    issue_epic = models.ForeignKey(Epic, null=True, blank=True, on_delete=models.CASCADE)
    issue_sprint = models.ForeignKey(Sprint, on_delete=models.CASCADE, null=True, blank=True)
    issue_priority = models.CharField(max_length=8, choices=ISSUE_PRIORITY)
    issue_assignee = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='assignees', null=True, blank=True) 
    issue_author = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='authors') 
    issue_remaining_estimate = models.IntegerField(null=True, blank=True) # w minutach
    issue_time_logged = models.IntegerField(default='0') 
    issue_attachment = models.FileField(null=True, blank=True)
    issue_backlog_order = models.IntegerField(null=True, blank=True)

Теперь я хотел бы отобразить список проблем, связанных с выбранным проектом.Я читал о создании словаря в представлении или правильном наборе запросов, но у меня нет решения :( Как я могу динамически определить, какой пользователь контекста (проекта) правильно выбрал и на основе этого фильтра правильно работает?

views.py

from django.shortcuts import get_object_or_404
from django.views.generic import ListView, DetailView
from .models import Project, Issue, Epic
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic import TemplateView
from django.urls import reverse_lazy


# Create your views here.

class ProjectListView(ListView):
  model = Project
  template_name = 'project-list.html'
  context_object_name = 'projects_list'

class ProjectBacklogView(DetailView):
  template_name = 'project-backlog.html'
  context_object_name = 'backlog'

urls.py

from django.urls import path
from .views import ProjectListView, ProjectDetailView, ProjectCreateView, ProjectUpdateView, ProjectDeleteView, ProjectBacklogView

urlpatterns = [
  path('<int:pk>/delete', ProjectDeleteView.as_view(), name='project-delete'),
  path('<int:pk>/edit/', ProjectUpdateView.as_view(), name='project-edit'),
  path('new/', ProjectCreateView.as_view(), name='project-create'),
  path('<int:pk>/', ProjectDetailView.as_view(), name='project-detail'),
  path('<int:pk>/backlog', ProjectBacklogView.as_view(), name='project-backlog'),
  path('', ProjectListView.as_view(), name='project'),
 ]

Большое спасибо заранее за вашу помощь!

1 Ответ

0 голосов
/ 24 февраля 2019

Теперь я хотел бы отобразить список проблем, связанных с выбранным проектом.

Вы можете просто поместить эту логику в шаблон отставания (project-backlog.html).Вы можете получить доступ к набору запросов, содержащему связанные проблемы, с помощью backlog.issue_set.all(), поэтому в своем шаблоне вы можете отобразить связанные проблемы, например, с помощью:

<!-- project-backlog.html -->
{% for issue in <b>backlog.issue_set.all</b> %}
{{ issue.name }}
{% endfor %}

Здесь мы, таким образом, перебираем Issue, связанные сbacklog объект, и мы визуализируем issue.name.Конечно, мы можем сделать его более сложным и представить его в виде таблицы.Например:

<!-- project-backlog.html -->
<table>
<tr><th>Name</th></tr>
{% for issue in backlog.issue_set.all %}
<tr><td>{{ issue.name }}</td></tr>
{% endfor %}
</table>

вышеприведенное, конечно, все еще черновик, и, возможно, потребуется некоторое редактирование, чтобы создать что-то более визуально привлекательное.

...