python - django 遍历作为查询集项目的列表
问题描述
我有一个由我的一个模型上的方法生成的列表。在主页上它工作得很好,但是当我进入一个项目的详细视图时,我可以访问该项目的所有部分,因为它们是模型的直接字段,但我无法访问列表中的项目。
模型:
class Project(models.Model):
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)
slug = models.SlugField(max_length=64)
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 save(self, *args, **kwargs):
if not self.id:
self.slug = slugify(self.title)
super(Project, self).save(*args, **kwargs)
@property
def updates(self):
updates = []
sequence_id = 1
categories = set(self.update_set.all().values_list(
'category__id', flat=True))
for cat_id in categories:
a = Update.objects.filter(
project=self, category__id=cat_id).order_by('added').last()
if cat_id == sequence_id:
updates.append(a)
else:
for i in range(cat_id - sequence_id):
updates.append('null')
updates.append(a)
sequence_id = cat_id
sequence_id += 1
return updates
class Update(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
category = models.ForeignKey(UpdateCategory, on_delete=models.PROTECT)
update = models.TextField(max_length=240, blank=True)
added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.update
观点很简单:
class ProjectDetailView(DetailView):
template_name = 'project_portal/project_detail.html'
queryset = Project.objects.all()
这是我正在使用的动态网址:
path('project/<int:pk>/',
ProjectDetailView.as_view(), name='project_detail'),
至于模板,我迷路了,这是我尝试过的事情之一:
<!DOCTYPE html>
{% extends "project_portal/base.html" %}
{% block home %}
<div id="main">
<div id="content">
<div>
<h1>{{ object.title }}</h1>
<h1>hello</h1>
{% if object_list %}
{% for item in updates %}
<p>{{ item }}</p>
{% endfor %}
{% else %}
<h2>No records found for this project</h2>
{% endif %}
</div>
</div>
</div>
{% endblock %}
我需要做什么才能访问生成的“更新”列表?
解决方案
update
是模型实例的一个属性,您需要像任何其他属性一样从那里访问它。另请注意,object_list
详细视图中没有。
<div>
<h1>{{ object.title }}</h1>
<h1>hello</h1>
{% for item in object.updates %}
<p>{{ item }}</p>
{% endfor %}
</div>
推荐阅读
- macos - 下载 Selenium Chrome Webdriver 无法正常工作
- discord.js - 批量删除消息时,discord.js 无法读取未定义的属性'id'
- javascript - SES 使用 nodejs 和 javascript 动态发送电子邮件
- python - 在 Python 脚本中使用 Snowflake SQL 中的变量
- java - 获取 java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Workbook
- python - python - 如何在python数据框中给定的日期添加灵活的年数?
- r - 以 r 中的科学参考编号结尾的单独句子
- apache-flink - Flink Jdbc 接收器
- selenium - 由于场景大纲中未定义的步骤,黄瓜报告的状态显示为失败
- javascript - 以 'MMM dd, yyyy' 格式打印 JavaScript 日期(如 'Oct 17, 2012')