Django: цикл по объектам и их полям в шаблоне

0

Я хочу сделать что-то подобное на шаблоне:

{% for account in integrations %}
   <tbody>
        <tr>
          <td>#</td>
          <td>
            <p>{{ account.label }}</p>
          </td>
        </tr>
      </tbody>
 {% endfor %}

Мой файл views.py:

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .forms import NewIntegrationForm
from modules import auth
from models import Worker

# Create your views here.

@login_required
def integrations(request):
    user = request.user
    all_integrations = Worker.objects.filter(user=user)
    if all_integrations != 0:
        return  render(request,
                   'integrations/index.html',
                   {'section': 'integrations', 'integrations': zip(all_integrations)})

Мой файл models.py:

from __future__ import unicode_literals

from django.db import models
from django.contrib.auth.models import User
import uuid

# Create your models here.

class Worker(models.Model):
    user = models.ForeignKey(User,
        on_delete=models.CASCADE,
        )
    a_key = models.CharField(max_length=255)
    a_secret = models.CharField(max_length=255)
    label = models.CharField(max_length=255)
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    def __str__(self):
        return self.id

Моя веб-страница возвращает результат, но он пуст. т.е. одна строка, но account.label пуст. Также, если я не заархивирован, он показывает 10 пустых строк, тогда как только один объект.

  • 0
    почему вы используете zip в наборе запросов?
  • 0
    @PRMoureu Если я не показываю, на странице отображаются 10 пустых строк. Это должен быть только один.
Показать ещё 9 комментариев
Теги:

4 ответа

1
Лучший ответ

Ваши взгляды должны быть:

return render(request, 'integrations/index.html',
             {'section': 'integrations',
              'integrations': Worker.objects.filter(user=user)})

Ваш шаблон должен быть:

{% if integrations %}
  <table>
    <thead>
      <tr>
          <th>#</th>
          <th>Label</th>
      </tr>
    </thead>
    <tbody>
    {% for account in integrations %}
        <tr>
          <td>{{ forloop.counter }}</td>
          <td>
            <p>{{ account.label }}</p>
          </td>
        </tr>
    {% endfor %}
    </tbody>
    </table>
 {% else %}
    <strong> No records returned </strong>
 {% endif %}     
  • 0
    Спасибо! работал как шарм. Не могли бы вы также объяснить, почему это сработало, пожалуйста?
0

Первое, что я хотел бы сделать, это дважды проверить панель администратора, если у вас нет Рабочих регистров с этим user_id с пустыми ярлыками, и просто подумайте, что у него есть только одна запись

Если ваш запрос будет возвращать только одного работника, таблица работ будет отображаться только одному пользователю (если только они не могут быть работниками в разных проектах)

вы должны изменить

all_integrations = Worker.objects.filter(user=user)

в

all_integrations = Worker.objects.get(user=user)

попробуйте простые интеграции печати без цикла, чтобы увидеть, что возвращается тоже, с zip и без проверки различного поведения, я бы порекомендовал не использовать zip

  • 0
    Я уже проверил перед публикацией этого вопроса. Использование .get вернет только один объект, но мне нужно вернуть несколько объектов, это имеет отношение ManyToOne.
  • 0
    и что печатает интеграция без зацикливания?
0

У вас есть две проблемы.

Во-первых, вы используете zip. Это не имеет никакого смысла, и вы должны отказаться от него.

Во-вторых, в шаблоне вы account.link доступ к account.link. У вашей модели интеграции нет поля link, поэтому она всегда будет пустой. Вы должны использовать фактическое поле или метод для этой модели.

  • 0
    account.link Я только что добавил перед публикацией вопроса, удалил. И, как я сказал, удаление zip показывает пустые строки, странно.
0

Попробуйте это с помощью zip

{% for account in integrations %}
  <p>{{ account.0.label }}</p>
{% endfor %}

Без zip

{% for account in integrations %}
  <p>{{ account.label }}</p>
  {% for manyy in account.many_to_many_field.objects.all %}
    {{ manyy.somefield }}
  {% endfor %}  
{% endfor %}
  • 0
    Будет ли оно работать с другими объектами?
  • 0
    Это потому, что когда вы используете zip python, конвертируйте список в наборы. Вы не можете получить доступ к набору с положительным индикатором. как accounts.0
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню