猿问

Django-在模板中显示关系表的逻辑

我在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)

这样Op,我的index.html模板中确实有了我需要的所有相关数据,但是我在逻辑上苦苦挣扎,无法以特定的方式在模板中显示这些数据。例如:

  • 显示所有列表Ops

  • 对于每个列表项,检查是否Character也是Participant当前Op项,

  • 如果不是,则显示一些按钮;如果不是,则显示按钮

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


喵喔喔
浏览 209回答 1
1回答

www说

更新您的模型: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 %}
随时随地看视频慕课网APP

相关分类

Python
我要回答