我想组成的数据库条目列表,并在另一个表中相应的(但不一定是现有的)相关条目。
具体的上下文是一个事件列表,用户应该能够在其中看到他是否已经声明了他的参与(因此在数据库中有一个应该显示的条目)或没有(这将给予他一个到参与表单的链接)
我的模型(最小):
class Event(models.Model):
title = models.CharField(max_length = 200)
#...
class Event_Participation(models.Model):
EVENT_PARTICIPATION_CHOICES = [
("Y", "Yes"),
("N", "No"),
# few other options
]
event = models.ForeignKey(Event, on_delete=models.CASCADE)
participation = models.CharField(max_length=1, choices= EVENT_PARTICIPATION_CHOICES)
user = models.CharField(max_length=10) #originally another foreign key
理想情况下,我搜索一个表达式,如 * Event.appendIfExists(Event_Participation)*...
对于模板渲染,我能够查询数据,但这似乎并不优雅,我不知道如何合并模板中的信息:
def event_list(request):
e_all = Event.objects.all() #normally filtered
part_list = {}
for e in e_all:
if e.event_participation_set.get(user_id = request.user.id) :
p = e.event_participation_set.get(user_id = request.user.id).participation
else:
p = "X"
part_list[e.id]= p
context = {"part_list":part_list,"full_event_list":e_all}
return render(request, "event_list.html", context)
模板中的一个基于索引的变量对 part_list 不起作用,我无法以某种方式扩展查询,这允许我只使用一个像这样的dict:
{% for event in full_event_list %}
<li> {{ event.title }}
{# Participation: {% if event.participation %} {{ event.participation }} {% else %} LINK {%endif%}
</li>
{% endfor %}
由于这似乎是一个非常常见的应用程序,我可能错过了一些非常明显的东西...
1条答案
按热度按时间p5cysglq1#
我们可以使用
select_related
或prefetch_related
方法来执行数据库连接并减少查询的数量。我们需要当前用户的
Event
对象沿着相关的Event_Participation
对象。然后在我们的模板中,我们可以访问每个
event
的相关Event_Participation
对象