django | импорт данных двух моделей на одной странице html - PullRequest
1 голос
/ 05 апреля 2020

У меня есть два вида в моем views.py, как показано ниже:

def table1(request):
    template_name = 'tables.html'
    queryset = one.objects.all()
    context = {
    "table1_list": queryset
    }
    return render(request, template_name, context)

def table2(request):
    template_name = 'tables.html'
    queryset = two.objects.all()
    context = {
    "table2_list": queryset
    }
    return render(request, template_name, context)

и следующие модели в models.py:

class one(models.Model):
    title = models.CharField(max_length=100)
    explanation = models.CharField(max_length=1000, blank=True, null=True)

 class two(models.Model):
    title = models.CharField(max_length=100)
    explanation = models.CharField(max_length=1000, blank=True, null=True)

В моем tables.html я хочу показать содержимое обеих этих моделей. У меня есть:

  <p>Table one content</p>
  <ul>
  {% for obj in table1_list %}
    {{ obj.title }}, {{ obj.explanation }}     
  {% endfor %}
 </ul>

  <p>Table two content</p>
  <ul>
  {% for obj in table1_list %}
    {{ obj.title }}, {{ obj.explanation }}     
  {% endfor %}
 </ul>

Но поскольку я могу просто вернуть одно представление из views.py в urls.py, я не могу вернуть обе таблицы. В urls.py мне нужно написать одно из следующих:

urlpatterns = [
    url(r'^$', home),
    url(r'^tables/$', table1),
]

или

urlpatterns = [
    url(r'^$', home),
    url(r'^tables/$', table2),
]

Я попытался добавить обе таблицы из запроса в views.py как:

def table1(request):
    template_name = 'tables.html'
    queryset_one = one.objects.all()
    queryset_two = two.objects.all()
    context = {
    "table1_list": [queryset_one, queryset_two]
    }
    return render(request, template_name, context)

но отображается только содержимое последней таблицы.

Буду признателен за любую помощь.

Ответы [ 2 ]

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

Вам нужно сделать это, чтобы показать две модели в вашем представлении.

def table1(request):
    template_name = 'tables.html'
    queryset_one = one.objects.all()
    queryset_two = two.objects.all()
    context = {
    "table1_list": queryset_one, 
    "table2_list": queryset_two
    }
    return render(request, template_name, context)

затем:

 <p>Table one content</p>
  <ul>
  {% for obj in table1_list %}
    {{ obj.title }}, {{ obj.explanation }}     
  {% endfor %}
 </ul>

  <p>Table two content</p>
  <ul>
  {% for obj in table2_list %}
    {{ obj.title }}, {{ obj.explanation }}     
  {% endfor %}
 </ul>

Не забудьте импортировать две модели в вашу views.py

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

Это может быть потому, что оба класса в вашей модели имеют одинаковые поля и django принимает только информацию о последних. Это может сработать, если передать оба запроса с разными ключами в словаре и соответствующим образом изменить ваш шаблон.

Таким образом, ваш views.py будет выглядеть так:

def table1(request):
    template_name = 'tables.html'
    queryset_one = one.objects.all()
    queryset_two = two.objects.all()
    context = {
    "t1": queryset_one, "t2":queryset_two
    }
    return render(request, template_name, context)

И ваш шаблон tables.html woud похож на

  <p>Table one content</p>
  <ul>
  {% for obj in t1 %}
    {{ obj.title }}, {{ obj.explanation }}     
  {% endfor %}
 </ul>

  <p>Table two content</p>
  <ul>
  {% for obj in t2 %}
    {{ obj.title }}, {{ obj.explanation }}     
  {% endfor %}
 </ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...