Python/Django:如何显示主模型和';外键模型';在HTML中一起
你好,我是Django和python的初学者,两天前刚开始学习。目前,我正在尝试在views.py中过滤数据,并创建一个显示在主页中的上下文,其中包含初始模型和“外键”模型。然而,我很难在网上找到帮助,尽管这是一个简单的问题。。这是 涉及的模型:Python/Django:如何显示主模型和';外键模型';在HTML中一起,python,django,Python,Django,你好,我是Django和python的初学者,两天前刚开始学习。目前,我正在尝试在views.py中过滤数据,并创建一个显示在主页中的上下文,其中包含初始模型和“外键”模型。然而,我很难在网上找到帮助,尽管这是一个简单的问题。。这是 涉及的模型: class Plan(models.Model): plan_ID = models.CharField( primary_key=True, max_length=8, validators=[
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)
用于HTML的Views.py:
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>
{%if crisilist%}
{crisisList%中的危机%
{{crisis.crisis_ID}
{{crisis.crisis_dateTime}
平面
平面状态
{%endfor%}
{%else%}
没有可用的危机
{%endif%}
我有几件事在这里不知道怎么办。。对不起,请原谅我
如上所述,我目前只能显示危机模型的属性,我不知道如何显示计划,也不知道如何过滤数据以获得具有相同危机ID和最高计划ID的计划
我在危机和计划之间有一种多对一的关系,这样一个危机可以有多个计划,通过“外键”链接:危机计划。我想让HTML显示所有危机对象,以及id值最高且属于上述HTML格式的同一危机的计划(planid,planstatus)
我知道这段代码的逻辑部分是在views.py中完成的,但是我不知道如何开始,或者怎么做。。非常感谢您的帮助,我将提供所需的任何其他信息。。我有许多其他类似型号的外键和多对多链接以及类似情况。。我希望从这里的答案中学习,这样我就可以在我的项目中的其他地方复制这一点 我认为你走在正确的轨道上,但应该从另一端开始,因为危机已经在计划之中 在“视图”中,拖动平面列表而不是十字列表,然后可以:
<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>
对在我发布了这个问题后,我意识到了这一点。起初我先用危机,因为。。我不知道如何查找具有最高计划ID的计划,以及如何在views.py中通过python对其进行编码。我知道如何在其他语言中实现,但我目前不知道如何通过python在views.py中实现。。编辑:另外,由于我的危机状态为“正在进行”,因此我也不知道如何在计划列表中筛选此信息。。很抱歉给你带来不便。你刚刚读懂了我的心思!我可以在views.py中运行for循环以获取计划ID的最大值吗?或者我要导入一个数学模块来获得max()方法吗?编辑时出现错误:尝试改用它:planList=Plan.objects.filter(Plan\u crisid\u crisis\u status='continuous')很好,orderby来自crisis对象。感谢像你这样了不起的人,每天都在学习新东西,兄弟:)祝你度过愉快的一天!
planList = Plan.objects.filter(crisis_ID__crisis_status='Ongoing').order_by('-crisisID__crisis_ID')