Я хотел бы кэшировать только комментарии раздел каждой статьи без кэширования всей страницы, поэтому мнения в статье, у меня естьНе может перебирать результаты кэшированных QuerySet в Django
try:
cmnts_key = post_slug
comments = cache.get(cmnts_key)
if not comments:
comments = Comment.objects.filter(post=post).order_by("created")
cache.set(cmnts_key, comments, COMMENTS_CACHE_TIMEOUT)
except:
print 'comments fetch exception'
pass
...
args = {}
args['post'] = post
args['comments'] = comments
return render(request, "post.html", args)
Однако в шаблон, где он пытается вынести комментарии {% for comment in comments %}
я получаю:
'Article' object is not iterable.
Я не знаю, является ли это принципиально невозможно перебрать кэшированные результаты набора запросов или есть проблема, мой код, и если да, то как Я чиню это?
ОБНОВЛЕНИЕ. Вот мой комментарий модель:
class Comment(models.Model):
author = models.ForeignKey(User)
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, default='', blank=True)
body = models.TextField()
post = models.ForeignKey(Article)
published = models.BooleanField(default=True)
def __unicode__(self):
return unicode("%s: %s" % (self.post, self.body[:60]))
def get_absolute_url(self):
return "/article/"+ self.slug
def save(self, *args, **kwargs):
self.title = comment_truncate(self.body)
super(Comment, self).save(*args, **kwargs)
@property
def cache_key(self):
return self.get_absolute_url()
Возможно, вам нужно будет увидеть больше кода. –
@ C.B Я думаю, что я упомянул проблемный код. Представления отлично работают без кеша. Что, по-вашему, отсутствует? – Jand
Если вы на самом деле указываете, что контекстная переменная 'comments' указывает на ваш запрос queryset. Прямо сейчас, похоже, что ваша переменная контекста комментариев указывает на объект статьи, а не на запрос запроса. –