两个外键和django模板中的值

mfy*_*ynf 5 django django-templates django-models django-views

我是django的新手,所以问题可能是愚蠢的,但如果你知道的话,请随时教我正确的方法.我试过谷歌搜索问题,但我仍然处于亏损状态.这是我的问题:

我的模型中有一个类有两个外键:

class X(models.Model):
    name = models.CharField(max_length=30)
    def __unicode__(self):
        return name

class Y(models.Model):
    name = models.CharField(max_length=30)
    def __unicode__(self):
        return name

class Z(models.Model):
    name = models.CharField(max_length=30)
    x = models.ForeignKey(X)
    y = models.ForeignKey(Y)
    def __unicode__(self):
        return name
Run Code Online (Sandbox Code Playgroud)

在我看来,我得到了一个X对象的部分列表和一个Y对象的部分列表,如下所示:

def MyView(x_pattern, y_pattern):
    x_list = X.objects.filter(name__contains=x_pattern)
    y_list = Y.objects.filter(name__contains=y_pattern)
    z_list = Z.objects.all()
    return render_to_response({'x_list': x_list, 'y_list': y_list, 'z_list': z_list})
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我希望能够显示如下表格:

<table>
  <tr>
   <td>Y</td>
   {% for x in x_list %}
    <td>{{ x }}</td>
   {% endfor %}
  </tr>
  {% for y in y_list %}
   <tr>
    <td>{{ y }}</td>
    {% for x in x_list %}
     <td>
      <!-- here I need help: 
           I need to display z[x, y] if it exists, or "N/A" otherwise.
      -->
     </td>
    {% endfor %}
   </tr>
  {% endfor %}
Run Code Online (Sandbox Code Playgroud)

我怎么在django中正确地做到这一点?

非常感谢你,

Dav*_*cos 0

您应该将逻辑保留在您的视图中。你为什么不直接过滤那里的 z_list 呢?

z_list = Z.objects.filter(x__name__contains=x_pattern, y__name__contains=y_pattern)
Run Code Online (Sandbox Code Playgroud)