Как запросить данные из двух таблиц с помощью django?

У меня есть таблицы mySQL, связанные отношениями "один ко многим"

параметрами главной таблицы являются:

  • имя
  • возраст
  • рост

параметрами второй таблицы являются:

  • f_name (как внешний ключ )
  • salary_date
  • salary

Я уже получаю данные из первой таблицы, используя этот код:

models.py

from tabnanny import verbose
from django.db import models, connections
from django.urls import reverse


class collection_data(models.Model):
    name = models.CharField(max_length=50)
    age =models.IntegerField()
    height = models.IntegerField()

    class Meta:
        verbose_name = 'Collection Data'



class second_data(models.Model):
    # connect this table with previos
    data = models.ForeignKey(collection_data, on_delete=models.CASCADE)

    salary= models.FloatField(max_length=100)
    salary_date= models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = 'Frequent Collection Data'
        ordering = ['salary_date']

views.py

from django.views.generic import DetailView

class InfoDetailView(DetailView):
    model = collection_data
    template_name = 'info/Info.html'
    context_object_name = 'info'

urls.py

path('<int:pk>', views.InfoDetailView.as_view(), name="info-data"),

Info.html

<ul class="data">
  <li>{{ info.name }}</li>
  <li>{{ info.age }}</li>
  <li>{{ info.height}}</li>
</ul>

<table>
  <tr>
    <th>Date</th>
    <th>Salary</th>
  </tr>
{% for el in second_data %}
  <tr>
    <td>05/06/2021</td>
    <td>1350$</td>
  </tr>
{% endfor %}
</table>

Результат на странице должен быть: enter image description here

Если вы хотите получить все объекты second_data, связанные с collection_data в шаблоне, вам нужно использовать {% for el in info.second_data_set.all %} вместо {% for el in second_data %}. Рассмотрите возможность установки атрибута related_name в models.ForeignKey(), чтобы вы могли сделать что-то вроде {% for el in info.'related_name'.all %}.

Также попробуйте использовать CamelCase для имен классов (CollectionData вместо collected_data).

query = second_data.objects.all() 

затем в вашем html файле просто напишите вот так

{% for item in query %}
         {{ item.salary }}
         {{ item.salary_date }}
{{ endfor }}
Вернуться на верх