У меня есть несколько таблиц базы данных, которые связаны с внешними ключами (вам придется простить основные примеры здесь, у меня возникли проблемы с копированием/вставкой из моей разработки env прямо сейчас) ,Отображение результатов связанной базы данных в одной таблице HTML
# models.py
class Task(models.Model):
details = models.ForeignKey(Details)
task = models.CharField(max_length=1024, null=false)
class Activity(models.Model):
task = models.ForeignKey(Task)
activity = models.CharField(max_length=1024)
class Resources(models.Model):
activity = models.ForeignKey(Activity, null=false)
resources = models.CharField (max_length=1024)
Мне нужно отобразить эти результаты в одной таблице. Обратите внимание, что задачи не может иметь деятельности и деятельность не может иметь каких-либо ресурсов и т.д. Например:
- TASK1
- Activity1
- Resource1
- Resource2
- Деятельность2
- Activity1
- Task2
- ... и т.д. ...
До сих пор я создал таблицу в моем forms.py, который содержит все поля, которые могли бы присутствовать в результат базы данных. Итак:
# forms.py
class ViewTable(tables.Table):
task = tables.Column(default=' ')
activity = tables.Column(default=' ')
resource = tables.Column(default=' ')
Я был тогда с помощью itertools.chain
, чтобы связать результаты вместе в правильном порядке, а затем вынести их в шаблон. Я в тупике здесь:
# views.py
table = None
for task in tasks:
if table:
table = list(chain(table, task)
else:
table = task
for activity in Activities.objects.filter(tasks=task):
table = list(chain(table, activity))
for resource in Resources.objects.filter(activity=activity):
table = list(chain(table, resource))
return render(request, 'table.html', {'table', table, })
# table.html
<table>
<tr>
<th>Tasks</th>
<th>Activity</th>
<th>Resources</th>
</tr>
{% for item in table %}
<tr>
<th>{{ item.task }}</th>
<th>{{ item.activity }}</th>
<th>{{ item.resource }}</th>
</tr>
{% endfor %}
</table>
Это не работает, потому что если у меня есть только одна задача (и никаких действий или ресурсов), то объект не итерацию, так что я получаю ошибку, когда я попробуйте сделать его в шаблоне.
Но в целом я чувствую, что это неряшливый и медленный способ делать что-то, и у меня возникают проблемы с лучшим способом. Исправления или полностью альтернативные рекомендации приветствуются!
Общая цель состоит в том, чтобы получить что-то, что показывает, как это:
Tasks Activities Resources ------------------------------------- task1 activity1 resource1 resource2 activity2 task2
Не знаете, почему вы должны использовать django-tables2 в этом случае, похоже, что вы вообще не используете его в своем представлении кода. Кроме того: если вы получаете сообщение об ошибке, что что-то не итерируемо, вы должны проверить, не до того, как попытаться перебрать его. – Jieter
Вы правы, я не понимал, что 'tables.Table' был частью' django-tables2'. Так что эта часть не нужна. Мой вопрос заключался в том, как придумать что-то вроде того, что я написал в своей «общей цели».Является ли этот объект итерируемым (исправление кода, который у меня есть) или совершенно другим решением, я все уши. –
Хм, глядя в ваши примеры, есть несколько синтаксических ошибок ('false' vs' False', отсутствующие скобки). Пожалуйста, прочитайте, как предоставить [минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve) Нет необходимости предоставлять полный проект django, но ваш код должен работать без синтаксических ошибок, представление должно быть полным, и ваши модели без внешних зависимостей ... – Jieter