Сравните две таблицы в Django - PullRequest
2 голосов
/ 05 апреля 2020

Я отображаю данные из Таблицы 1 в своем шаблоне, как показано ниже, недавно я создал еще одну модель под названием Таблица2, которая содержит данные, которые я также хотел бы отобразить в своей таблице.

Мне нужно проверить, если code в Таблице1 существует в Таблице2, и если да, возьмите var1 и var2 из Таблицы2 и отобразите его в моем шаблоне.

Кто-нибудь знает, как это сделать наилучшим образом?

Псевдокод

If `code` In Table1 Exists In Table2
Get var1, var2 From Table2

Мой шаблон

{% for data in info %}
    <tr>
        <td>{{ data.created }}</td>
        <td>{{ data.publisher }}</td>
        <td>{{ data.person }}</td>
        <td>{{ data.code }}</td>
    </tr>
{% endfor %}

Мой взгляд

def home(request):

    info = Table1.objects.all()[:20]
    return render(request, 'app/home.html', {'info':info})

My models.py

class Table1(models.Model):
    created = models.DateTimeField(default=None)
    publisher = models.CharField(max_length=50, default=None)
    person = models.CharField(max_length=50, default=None)
    code = models.CharField(max_length=25, default=None)

    class Meta:
        db_table = 'Table1'
        unique_together = (("publisher", "person", "code"),)
    def __str__(self):
        return self.created

class Table2(models.Model):
    code = models.CharField(max_length=30, default=None, null=True)
    url = models.CharField(max_length=100, default=None, null=True)
    var1 = models.CharField(max_length=50, default=None, null=True)
    var2 = models.CharField(max_length=50, default=None, null=True)

    def __str__(self):
        return self.code

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

def home (запрос):

info = Table1.objects.all()[:20]
filter_data = []
for x in info:
  if x.code != '':
  try:
        getVars = Table2.objects.filter(code = x.code)
        x.var1  = getVars.var1
        x.var2  = getVars.var2
        filter_data.append(x)
      except Exception:
        filter_data.append(X)   




return render(request, 'app/home.html', {'info':filter_data})




###html


{% for data in info %}
<tr>
    <td>{{ data.created }}</td>
    <td>{{ data.publisher }}</td>
    <td>{{ data.person }}</td>
    <td>{{ data.code }}</td>
    <td>{% if data.var1 ==  %} - {%else%} {{data.var1}} {% endif %}</td>
    <td>{% if data.var2 ==  %} - {%else%} {{data.var2}} {% endif %}</td>

</tr>

{% endfor%}

0 голосов
/ 05 апреля 2020

views.py def home (запрос):

    info = Table1.objects.all()[:20]
    table_2 = Table2.objects.all()[:20]
    return render(request, 'app/home.html', {'info':info,'table_2':table_2})

шаблон

{% for data in info %}
    <tr>
        <td>{{ data.created }}</td>
        <td>{{ data.publisher }}</td>
        <td>{{ data.person }}</td>
        <td>
          {% for table_2_data in table_2 %}
             {% if data.code == table_2_data.code %}
                 {{table_2_data.var1}} {{table_2_data.var2}}
             {% endif %}
          {% endfor %}
        </td>
    </tr>
{% endfor %}
...