我在模型发布和更新之间存在一对多的关系。我需要的是结合Post条目和最新Update条目的列表(表)。像这样的东西:
Title Status % Progress Date
Zulu great one zulu two status 20 Nov. 19, 2019, 10 a.m.
Create tables status create table dua 40 Nov. 19, 2019, 9:45 a.m.
Remember my first post status tiga 40 Nov. 19, 2019, 9:43 a.m.
我想要的只是每个帖子(标题)的最新更新(状态,同意,日期),而不列出所有更新。(请参见下面的代码)
我有models.py如下:
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
#....
class Update(models.Model):
posting = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="opdates")
status = models.CharField(max_length=100)
progress = models.IntegerField()
created_date = models.DateTimeField(default=timezone.now)
#...
和views.py如下:
def post_list(request, template_name="post_list.html"):
posts = Post.objects.all()
updates = Update.objects.order_by('-created_date')
ctx = {}
ctx['posts'] = posts
ctx['updates'] = updates
return render(request, template_name, ctx)
以及我的模板如下:
<table>
<tr>
<th>Title</th>
<th>Status</th>
<th>% Progress</th>
<th>Date</th>
</tr>
<tbody>
{% for up in updates %}
<tr>
<td>{{ up.posting.title }}</td>
<td>{{ up.status }}</td>
<td>{{ up.progress }}</td>
<td>{{ up.created_date }}</td>
</tr>
{% endfor %}
</tbody>
注意:我可以按如下所示运行python manage.py shell:
>>> from blog.models import Post, Update
>>> p = Post.objects.get(title='Create tables')
>>> p
<Post: Create tables>
>>> p.opdates.order_by('-created_date')
<QuerySet [<Update: status create table dua>, <Update: status create satu>]>
>>> p.opdates.order_by('-created_date').first()
<Update: status create table dua>
>>> p.opdates.order_by('-created_date').first().progress
40
我如何将其翻译为views.py(或models.py或模板)?感谢帮助
Okey,我已经弄清楚了,我发现我可以在模板中编写如下:
<table>
<tr>
<th>Title</th>
<th>Status</th>
<th>% Progress</th>
<th>Date</th>
</tr>
<tbody>
{% for p in posts %}
<tr>
<td>{{ p.title }}</td>
<td>{{ p.opdates.last.status }}</td>
<td>{{ p.opdates.last.progress }}</td>
<td>{{ p.opdates.last.created_date }}</td>
</tr>
{% endfor %}
</tbody>
我使用了在更新模型中持有ForeignKey的相关名称“ opdates”。