首页 > 解决方案 > 在点击的变量上过滤的 Django 模板

问题描述

采取以下模型:

class InsName(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30, verbose_name = "Insurer/Broker")
    def __str__(self):
        return self.name

class Development(models.Model):
    id = models.AutoField(primary_key=True)
    logno = models.CharField(max_length=13, unique=True)
    insurer = models.ForeignKey(InsName, on_delete=models.SET_NULL, null=True, blank=True)

    Phase_status = (
    ('dev','Development'),
    ('review','Review')
)
    phase = models.CharField(max_length=10,
    choices = Phase_status,
    default='review',
)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date_added = models.DateField(default=datetime.date.today)
    comments = models.TextField(max_length=350)

    def get_absolute_url(self):
        return reverse('development-detail', args=[str(self.id)])
    def __str__(self):
        """String for representing the Model object."""
        return f'{self.id} ({self.insurer})'

我有一个输出发展表的模板。我想要的是,当Insurer单击它时,它会显示一个为该选择过滤的所有开发的模板。

我一直在尝试各种事情,但我不知道如何将变量Insurer名放入视图:

def insurer_filter(request):
    insname = InsName.objects.filter(name = {{ value }})
    ins_name = Development.objects.filter(insurer = insname)
    return render(request, 'insurer_filter.html', context = ins_name)

请原谅我狡猾的编码(或任何建议都有帮助!)。我对此完全陌生,只是找到了自己的脚,但在执行上述操作时我找不到任何帮助。

当前开发列表模板:

{% extends "base_generic.html" %}

{% block content %}
  <h1>My Developments</h1>
  {% if mydevs %}
  <table style="width:100%">
    <thead>
      <tr>
        <td>Log Number</td>
        <td>Client</td>
      </tr>
    </thead>
    <tbody>
    {% for development in mydevs %}
      <tr>
        <td><a href="{{ development.get_absolute_url }}">{{development.logno}}</a></td>
        <td><a href="insurer_filter/?name={{ value }}">{{development.insurer}}</a></td>
      </tr>
    {% endfor %}
  </tbody>
  </table>

然后我猜我的新insurer_filter 模板将类似于:

{% extends "base_generic.html" %}

{% block content %}
  <h1><Value> Developments</h1>
  {% if ???%}
  <table style="width:100%">
    <thead>
      <tr>
        <td>Log Number</td>
        <td>Client</td>
      </tr>
    </thead>
    <tbody>
    {% for development in wilsons %}
      <tr>
        <td><a href="{{ development.get_absolute_url }}">{{development.logno}}</a></td>
        <td>{{development.insurer}}</td>
      </tr>
    {% endfor %}
  </tbody>
  </table>

标签: django

解决方案


试试这个:

网址.py:

url(r'insurer_filter/(?P<name>[A-Za-z]+)/$', views.insurer_filter),

视图.py:

 def insurer_filter(request, name):
     insname = InsName.objects.filter(name = name)
     ins_name = Development.objects.filter(insurer = insname)
     return render(request, 'insurer_filter.html', context = ins_name)

推荐阅读