django:如何创建由父表和子表组成但只有最新子表的表?

问题描述 投票:0回答:1

我在模型发布和更新之间存在一对多的关系。我需要的是结合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或模板)?感谢帮助

templates django-models django-views parent-child
1个回答
0
投票

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”。

© www.soinside.com 2019 - 2024. All rights reserved.