【问题标题】:Django - logic behind displaying relational tables in templateDjango - 在模板中显示关系表背后的逻辑
【发布时间】:2013-05-16 13:00:38
【问题描述】:

我的 Django 模型中定义了多个相关表:

# first models.py

from django.db import models

class Character(models.Model):
    first_field = models.DateTimeField()
    second_field = models.TextField()

# second models.py

from django.db import models

class Op(models.Model):
    fk_character = models.ForeignKey('Character')
    some_field = models.DateTimeField()
    other_field = models.TextField()


class Participant(models.Model):
    fk_op = models.ForeignKey('Op')
    fk_character = models.ForeignKey('Character')
    some_other_field = models.IntegerField(default=0)

现在,我正在以如下方式将此数据从视图发送到模板:

# views.py

from django.shortcuts import render_to_response
from django.template import RequestContext

from second.models import MainModel

def home(request):
    data = Op.objects.filter(some_field__isnull=True).order_by('-date')
    rc = RequestContext(request, {'data':data})
    return render_to_response('index.html', rc)

通过这种方式,我的index.html 模板中确实有我需要的所有Op 相关数据,但我在努力以特定方式在我的模板中显示这些数据的逻辑。例如:

  • 显示所有Ops的列表,
  • 对于每个列表项,检查Character 是否也是当前Op 项中的Participant
  • 如果不是,显示一些按钮,如果是,则不显示按钮

我知道模板不应该处理任何编程逻辑,但我也不确定解决这个问题的最佳方法是什么。我应该在我的视图中执行所有逻辑并构造一个新对象并将该对象发送到我的视图,还是有一种简单的方法可以在模板中使用我正在发送的当前对象解决这个问题?

【问题讨论】:

  • 从您发布的内容来看,我看不出角色模型和参与者模型之间有任何联系,“角色也是参与者”是什么意思
  • “人物也是参与者”不是很清楚,这些似乎是完全不同的对象
  • 啊,抱歉,我在Participant 模型中省略了一个字段。更新了我原来的帖子...

标签: python django django-templates django-views


【解决方案1】:

更新你的模型:

class Op(models.Model):
    fk_character = models.ForeignKey('Character')
    some_field = models.DateTimeField()
    other_field = models.TextField()

    def check_if_participant(self):
        return bool(self.participant_set.all())

显示所有Ops的列表:

{% for op in data %}
   {{op.some_field}}

   {% if op.check_if_participant %}Yes - Character is participant {% endif %}
{% endfor %}

【讨论】:

  • 我完全忘记了在模型中定义函数 -.- 这非常接近,但有点错误可能是因为我的问题有一个小错误。稍后我会尝试采用它来满足我的需求...
  • 嗯,其实我意识到我可能需要为此编写一个模板标签,对吧?
  • 如果你的问题是你真正想要做的,那么我的回答就足够了
  • 同意。这就是我投票的原因:) 你能告诉我在我编辑了我的原始帖子后是否可以做我真正需要的事情?
  • 我认为不需要模板标签。不会{% if op.check_if_participant %}Yes - Character is participant{% else %} <button /> {% endif %} 工作?
猜你喜欢
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 2018-12-30
  • 2017-05-07
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多