Отобразить удобочитаемый выбор в шаблоне
Я видел сообщения на этом уже Показать выбор форм в шаблоне Django
и они рекомендуют использовать в шаблоне {{ item.get_categories_display }}, но мои настройки немного отличаются, поэтому я не могу получить доступ к элементам, читаемым человеком в категориях.
Вот мой взгляд,
def forum(request, categ):
postModelAll = PostModel.objects.all()
postModel = PostModel.objects
.filter(topic__categories = cater)
.values('topic_id')
.annotate( max=Max('pub_date'),
freq=Count('topic_id'),
contributors=Count('author', distinct=True))
.order_by('-max')
columnlist = []
for item in postModelAll:
columnlist.append([item])
for item in postModel:
for i in range(len(columnlist)):
if item['max'] == columnlist[i][0].pub_date:
item['author'] = columnlist[i][0].topic.author
item['authorid'] = columnlist[i][0].topic.author_id
item['topic'] = columnlist[i][0].topic.topic
item['category'] = columnlist[i][0].topic.categories
item['post'] = columnlist[i][0].post
item['views'] = columnlist[i][0].topic.views
context = {'forum_model': forum_model, 'current_time': timezone.now()}
return render(request, 'forum_by_category.html', context)
Проблема в этом
line item['category'] = columnlist[i][0].topic.categories
потому что он не несет всю информацию для отображения.
Шаблон,
{% for item in forum_model %}
<tr>
<tr>
<td>{{ item.get_category_display }}</td>
<td>{{ item.topic_id }}</td>
<td><a href="{% url 'thread' item.topic_id %}"><span title="{{ item.post|slice:':300' }}">{{ item.topic }}</span></a></td>
<td class="table-cell-center"><a href="{% url 'profile' item.authorid %}"><span title="{{ item.author }}'s profile">{{ item.author }}</span></a></td>
<td class="icon-nowrap"><span title="published {{ item.max }}">{{ item.max|timesince:current_time}}</span></td>
<td class="table-cell-center">{{ item.views }}</td>
<td class="table-cell-center">{{ item.freq }}</td>
<td class="table-cell-center">{{ item.contributors }}</td>
<td>votes</td>
</tr>
</tr>
{% endfor %}
Модель,
class TopicModel(models.Model):
topic = models.CharField(max_length = 100)
topicAuthor = models.CharField(max_length = 100)
author = models.ForeignKey(User)
GeneralHelp = 'GH'
SubmittingPortfolios = 'SP'
GeneralTeaching = 'GT'
Level12 = 'L12'
Level3 = 'L3'
Level4 = 'L4'
Level5 = 'L5'
Level6 = 'L6'
forum_categories = (
(GeneralHelp, 'General Help'),
(SubmittingPortfolios, 'Submitting Portfolios'),
(GeneralTeaching, 'General Teaching'),
(Level12, 'Level 1 & 2'),
(Level3, 'Level 3'),
(Level4, 'Level 4'),
(Level5, 'Level 5'),
(Level6, 'Level 6'),
)
categories = models.CharField(
max_length=30,
choices=forum_categories,
default=Level4,
)
views = models.PositiveIntegerField(default = 0)
def __str__(self): # __unicode__ on Python 2
return self.topic
Я просто чернею, когда пытаюсь отобразить {{ item.get_category_display }}
Любая помощь будет принята с благодарностью,
Спасибо,
1 ответ
Решение
Держать topic
Объект в словаре:
if item['max'] == columnlist[i][0].pub_date:
item['post'] = columnlist[i][0].post
item['topic'] = columnlist[i][0].topic
И ваш шаблон:
{% for item in forum_model %}
<tr>
<tr>
<td>{{ item.topic.get_categories_display }}</td>
<td>{{ item.topic_id }}</td>
<td><a href="{% url 'thread' item.topic.topic_id %}"><span title="{{ item.post|slice:':300' }}">{{ item.topic.topic }}</span></a></td>
<td class="table-cell-center"><a href="{% url 'profile' item.topic.author_id %}"><span title="{{ item.topic.author }}'s profile">{{ item.topic.author }}</span></a></td>
<td class="icon-nowrap"><span title="published {{ item.max }}">{{ item.max|timesince:current_time}}</span></td>
<td class="table-cell-center">{{ item.topic.views }}</td>
<td class="table-cell-center">{{ item.freq }}</td>
<td class="table-cell-center">{{ item.contributors }}</td>
<td>votes</td>
</tr>
</tr>
{% endfor %}