Python/Django:如何在HTML中同时显示主模型和“foreignkey模型”

2024-04-24 01:17:25 发布

您现在位置:Python中文网/ 问答频道 /正文

今天好,我是Django和python的初学者,两天前才开始学习。目前,我正在尝试在中过滤数据视图.py以及创建一个显示在我的主页中的上下文,其中包含初始模型和“外键”模型。然而,我在网上找不到帮助,尽管这是一个简单的问题。。来吧。。你知道吗

涉及的模型:

class Plan(models.Model):
    plan_ID = models.CharField(
        primary_key=True,
        max_length=8,
        validators=[RegexValidator(regex='^\w{8}$', message='Length has to be 8', code='nomatch')]
    )
    plan_crisisID = models.ForeignKey(Crisis, on_delete=models.CASCADE)
    plan_status = models.CharField(max_length=50)

class Crisis(models.Model):
    crisis_ID = models.CharField(
        primary_key=True,
        max_length=4,
        validators=[RegexValidator(regex='^\w{4}$', message='Length has to be 4', code='nomatch')]
    )
    crisis_name = models.CharField(max_length=50)

你知道吗视图.py对于HTML:

def home(request):
    template = loader.get_template('pmoapp/home.html')
    crisisList = Crisis.objects.filter(crisis_status='Ongoing').order_by('-crisis_ID')

    context = {
        'crisisList': crisisList,
        #'planList': planList
    }
    return HttpResponse(template.render(context, request))

最后,我的HTML页面:

<tbody>
    {% if crisisList %}
         {% for crisis in crisisList %}
              <tr>
                   <td>{{ crisis.crisis_ID }}</td>
                   <td><a href="/report/{{ crisis.crisis_ID}}">{{ crisis.crisis_name }}</a></td>
                   <td>{{ crisis.crisis_dateTime }}</td>
                   <td>planid</td>
                   <td>planstatus</td>
             </tr>
          {% endfor %}
      {% else %}
          <p>No crisis available.</p>
      {% endif %}
 </tbody>

我有几件事不知道该怎么办。。对不起,请原谅我。。你知道吗

如上所述,我目前只能显示危机模型的属性,我不知道如何显示计划,也不知道如何过滤数据以获得具有相同危机ID和最高计划ID的计划

我在危机和计划之间有一个多对一的关系,这样一个危机可以有多个计划,由“外键”链接:Plan\u crisid。我想让HTML以上面看到的HTML格式显示所有危机对象,以及id值最高且属于同一危机的计划(planid,planstatus)。你知道吗

我知道这段代码的逻辑部分是在视图.py,但是我不知道该怎么开始,也不知道该怎么做。。非常感谢您的帮助,我将提供所需的任何其他信息。。我有许多其他类似的模式与外键和多对多的链接,在类似的情况下。。我希望从这里的答案中学习,这样我就可以在我的项目中的其他地方复制这一点。。你知道吗


Tags: py模型视图idmodelshtmllengthmax
1条回答
网友
1楼 · 发布于 2024-04-24 01:17:25

我认为你们走在正确的轨道上,但应该从另一端开始,因为危机正在计划之中。你知道吗

在视图中,拉入平面列表而不是十字列表,然后可以:

<tbody>
{% if planList %}
     {% for plan in planList %}
          <tr>
               <td>{{ plan.crisisID.crisis_ID }}</td>
               <td><a href="/report/{{ panel.crisisID.crisis_ID}}">{{ crisis.crisis_name }}</a></td>
               <td>{{ plan.crisisID.crisis_dateTime }}</td>
               <td>{{ plan.plan_ID }}</td>
               <td>{{ plan.planstatus }}</td>
         </tr>
      {% endfor %}
  {% else %}
      <p>No crisis available.</p>
  {% endif %}
</tbody>

哦,您可能应该将查询转换为:

planList = Plan.objects.filter(crisis_ID__crisis_status='Ongoing').order_by('-crisisID__crisis_ID')

相关问题 更多 >