大家好我正在研究django视图和模板,遇到了一些问题。 我有一个名为'代谢物的模型,其中包含:id,名称,隔室,电荷和配方5组分。 我有另一个名为' Reactionsmeta'的模型,其中包含:id(反应),名称,代谢物1,代谢物2,......代谢物6。这个模型的表格没有填写完整,因为有时一个id对应于5个代谢物,但有时甚至是20个。
我写了一个可以显示所有反应的模板,当我点击反应并进入详细页面时,我还想显示参与这个反应的代谢物。我的views.py和模板编写如下:
def compare_floats(row):
return row['col1'] == row['col2'] # you can use any comparison you want here
df['col3'] = df.apply(compare_floats, axis=1)
reactions_detail.html
{% extends 'Recon/Base.html' %}
{% load static %}
{% block title %}Reaction Details{% endblock %}
{% block body %}
<h1>{{ reactionsmeta.id }}</h1>
<h2>{{ reactionsmeta.name}}</h2>
<!-- Left Album Info -->
<div class="col-sm-4 col-md-3">
<div class="panel panel-default">
<div class="panel-body">
<a href="{% url 'detail_reaction' reactionsmeta.id %}">
{% if reactionsmeta.id %}
<img src="{% static "Recon/images/Logo-Technische-Universiteit-Eindhoven.jpg" %}" class="img-responsive">
{% else %}
<h3>No image to display</h3>
{% endif %}
</a>
<h1>{{ reactionsmeta.id }} <small>{{ reactionsmeta.name }}</small></h1>
</div>
</div>
</div>
如何在reaction_detail.html ???
中编写循环修改:
views.py
from django.views import generic
from .models import Reactionsmeta,Metabolites,Reactions
from django.shortcuts import render
class IndexView(generic.ListView):
template_name = 'Recon/index.html'
context_object_name = 'Reactions_object'
def get_queryset(self):
return Reactionsmeta.objects.all()
class DetailsView(generic.DetailView):
model = Reactionsmeta
template_name = 'Recon/reactions_detail.html'
def get_context_data(self, **kwargs):
context = super(DetailsView, self).get_context_data(**kwargs)
context['metabolite'] = Metabolites.objects.all()
context['reactions'] = Reactions.objects.all()
# And so on for more models
return context
答案 0 :(得分:0)
我没有看到很好的方法,因为每个代谢物都有自己的领域,不一定是外键。如果代谢物位于ManyToMany
区域,through
定义化学计量,则会更容易。
Django's ManyToMany Relationship with Additional Fields
https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_many/
也就是说,在模板中,您可以通过以下方式显示Reactionsmeta代谢物1和化学计量:
{% if reactionsmeta.metabolite1 %}
Metabolite: {% reactionsmeta.metabolite1 %}
Stoichiometry: {% reactionsmeta.stoichiometry1 %}
{% endif %}
{% if reactionsmeta.metabolite2 %}
Metabolite: {% reactionsmeta.metabolite2 %}
Stoichiometry: {% reactionsmeta.stoichiometry2 %}
{% endif %}
...
{% if reactionsmeta.metabolite60 %}
Metabolite: {% reactionsmeta.metabolite60 %}
Stoichiometry: {% reactionsmeta.stoichiometry60 %}
{% endif %}
上述问题:
编辑:对CharFields实际上是FK的评论的回应。
所以我认为您需要在视图中查询db以获取有关代谢物的信息并将其返回给模板。我认为,根据设计,模板不应该能够访问数据库。
编辑:我担心你将不得不学习如何编写自定义视图。这真的不错,但很难做一些你尝试使用泛型的东西。