Я хочу сделать что-то подобное на шаблоне:
{% 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 пустых строк, тогда как только один объект.
Ваши взгляды должны быть:
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 %}
Первое, что я хотел бы сделать, это дважды проверить панель администратора, если у вас нет Рабочих регистров с этим user_id с пустыми ярлыками, и просто подумайте, что у него есть только одна запись
Если ваш запрос будет возвращать только одного работника, таблица работ будет отображаться только одному пользователю (если только они не могут быть работниками в разных проектах)
вы должны изменить
all_integrations = Worker.objects.filter(user=user)
в
all_integrations = Worker.objects.get(user=user)
попробуйте простые интеграции печати без цикла, чтобы увидеть, что возвращается тоже, с zip и без проверки различного поведения, я бы порекомендовал не использовать zip
У вас есть две проблемы.
Во-первых, вы используете zip
. Это не имеет никакого смысла, и вы должны отказаться от него.
Во-вторых, в шаблоне вы account.link
доступ к account.link
. У вашей модели интеграции нет поля link
, поэтому она всегда будет пустой. Вы должны использовать фактическое поле или метод для этой модели.
Попробуйте это с помощью 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 %}
zip
python, конвертируйте список в наборы. Вы не можете получить доступ к набору с положительным индикатором. как accounts.0
zip
в наборе запросов?