Как отобразить последнее обновление для каждой категории для проекта - PullRequest
0 голосов
/ 08 июля 2019

У меня есть страница, которая отображает снимок проектов в списке блоков, у каждого блока есть владелец проекта, дата заголовка и тому подобное, внутри также есть окно, которое разделяет обновления на 7 категорий, обновления в отдельной таблице. Цикл проектов хорошо, но обновления приходят от всех проектов. Как отфильтровать другие проекты?

Я могу опубликовать свой код, но я делал это 2 или 3 раза за последний месяц без ответа, так что подозреваю, что моя структура полностью неверна.

Чтобы дать вам пример того, чего я добиваюсь, чтобы иметь возможность извлечь последнее обновление, отфильтрованное по идентификатору проекта, а затем обновить категорию. Возможно ли это?

РЕДАКТИРОВАТЬ: добавление шаблона и css, чтобы вы могли надеяться увидеть графически, что я пытаюсь сделать.

models.py:

from datetime import datetime
from django.conf import settings
from django.contrib.auth.models import Permission, User
from django.db import models
from django.urls import reverse


User = settings.AUTH_USER_MODEL


class Area(models.Model):
    '''
    Project area - Digital, Uplink, DTH VoD, Interactive, OTT Streaming,
    OTT VoD, OTT Platform, Operational Improvement, Archive.
    '''
    name = models.CharField(max_length=45, unique=True)
    code = models.CharField(max_length=45, unique=True)

    def __str__(self):
        return self.name


class Priority(models.Model):
    '''
    Project priority - Low, Medium, High - defualt set to Low
    '''
    priority = models.CharField(max_length=16, unique=True)
    colour = models.CharField(max_length=7, unique=True)

    def __str__(self):
        return self.priority


class Project(models.Model):
    '''
    Main Project, serves the default Projects Portal window.
    '''
    date_published = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    area = models.ForeignKey(Area, on_delete=models.PROTECT)
    title = models.CharField(max_length=128, unique=True)
    summary = models.CharField(max_length=256)
    others = models.CharField(max_length=128, blank=True)
    deadline = models.DateField(null=True, blank=True)
    priority = models.ForeignKey(Priority, on_delete=models.PROTECT)
    closed = models.DateTimeField(null=True, blank=True)

    def __str__(self):
        return self.title


class UpdateCategory(models.Model):
    '''
    Updates are split into 6 categories that applies to each project
    with 2 extra categories of Other Updates and Mitigating issues.
    '''
    name = models.CharField(max_length=24, unique=True)

    def __str__(self):
        return self.name


class Update(models.Model):
    '''
    Latest update must have a category from UpdateCategory
    and be linked to a project, all updates are timestamped.
    '''
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    category = models.ForeignKey(UpdateCategory, on_delete=models.PROTECT)
    update = models.TextField(max_length=2048, blank=True)
    added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.update

Таким образом, каждый проект имеет свои обновления (обновление состояния проекта), разделенные на 7 различных категорий, поскольку каждый проект имеет одну и ту же структуру, а последняя категория «другие обновления» - это ловушка для проблем / блокировщиков проекта. возможность увидеть последнее обновление каждого проекта в одном небольшом блоке дает хороший обзор того, где находится проект. Визуально каждый проект будет отображаться в виде блока с последним обновлением для каждой категории. Я думаю, что мне нужно настроить функцию, которая выбирает последнее обновление из каждой категории (пустое или нулевое значение полностью допустимо и должно быть просто пустым или пробелом), но я не могу понять, как это будет отфильтровано для каждого проекта, поскольку в данный момент зацикливание происходит внутри шаблона.

{% extends "project_portal/base.html" %}
{% block home %}

<div id="main">
  <div id="content">
    <hgroup>
      <h1>OTT</h1>
      <h2>Service Integration Development Project Portal</h2>
    </hgroup
  </div>
  {% if object_list %}
  {% for project in project_list %}
  <div class="container">
    <div class="box1">
      <h4>{{ project.title }}</h4>
      <p>Project Status</p>
      <div class="square"></div>
    </div>

    <div class="box2">
      <strong>{{ project.summary }}</strong>
    </div>

    <div class="box3">
      <strong>{{ project.user }}</strong>
    </div>

    <div class="box4">
      <table class="items">
        <col width="160px">
        <tr class="updates">
          <!-- <td>Monitoring Status</td> -->
          <td><a href="{{ project.id }}/update">Impact Scenario</a></td>
          <td>&#x2705;</td>
        </tr>
        <tr class="updates">
          <td><a href="{{ project.id }}/update">Support Model</a></td>
          <td>&#x2705;</td>
        </tr>
        <tr class="updates">
          <td><a href="{{ project.id }}/update">Monitoring Status</a></td>
          <td>&#x2705;</td>
        </tr>
        <tr class="updates">
          <td><a href="{{ project.id }}/update">Training</a></td>
          <td>&#x2705;</td>
        </tr>
        <tr class="updates">
          <td><a href="{{ project.id }}/update">Service Rehearsals</a></td>
          <td></td>
        </tr>
        <tr class="updates">
          <td><a href="{{ project.id }}/update">Documentation</a></td>
          <td></td>
        </tr>
        <tr class="updates">
          <td><a href="{{ project.id }}/update">Other Updates</a></td>
          <td></td>
        </tr>
      </table>
    </div>

    <div class="box5">
      {% for item in update_category %}
      <table>
        <tr>
          <td>{{ update.id }}</td>
        </tr>
      </table>
      {% endfor %}
    </div>
    <div class="box6">
      <h4>Project Timeline</h4>
    </div>
    <div class="box7">TimeLine</div>
  </div>
  {% endfor %}
  {% endif %}
</div>
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...