У меня есть страница, которая отображает снимок проектов в списке блоков, у каждого блока есть владелец проекта, дата заголовка и тому подобное, внутри также есть окно, которое разделяет обновления на 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>✅</td>
</tr>
<tr class="updates">
<td><a href="{{ project.id }}/update">Support Model</a></td>
<td>✅</td>
</tr>
<tr class="updates">
<td><a href="{{ project.id }}/update">Monitoring Status</a></td>
<td>✅</td>
</tr>
<tr class="updates">
<td><a href="{{ project.id }}/update">Training</a></td>
<td>✅</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 %}