Проблема проста.У меня есть функция lazy_load_posts (), которая через AJAX-запрос добавляет все мои модельные комментарии ко всем статьям одинаково, но мне нужно только добавить связанные комментарии к одной статье.Я пробовал метод фильтра и prefetch_related, но это не сработало.Я также получаю сообщение об ошибке в консоли POST http://localhost:8000/lazy_load_posts/ 500 (внутренняя ошибка сервера)
My view.py
Класс PhotoDetailView (DetailView):
queryset = Photo.objects.select_related('user').prefetch_related('comments', 'comments__user', 'likes')
context_object_name = 'photo'
template_name = 'photo_detail.html'
def get_success_url(self):
return reverse('photo_detail', kwargs={'pk': self.object.pk})
def get_context_data(self, **kwargs):
context = super(PhotoDetailView, self).get_context_data(**kwargs)
comments = self.object.comments.all()[:5]
context['comments'] = comments
context['form'] = AddCommentForm(initial={'post': self.object.pk})
context['is_liked_by_user'] = self.request.user in self.object.likes.all()
return context
def lazy_load_posts (запрос):
page = request.POST.get('page')
comments = Comment.objects.all()
results_per_page = 5
paginator = Paginator(comments, results_per_page)
try:
comments = paginator.page(page)
except PageNotAnInteger:
comments = paginator.page(2)
except EmptyPage:
comments = paginator.page(paginator.num_pages)
posts_html = loader.render_to_string(
'comments.html',
{'comments': comments}
)
output_data = {
'posts_html': posts_html,
'has_next': comments.has_next(),
}
return JsonResponse(output_data)
and my script.js
$('#lazyLoadLink').on('click', function() {
var link = $(this);
var page = link.data('page');
$.ajax({
type: 'post',
url: '/lazy_load_posts/',
data: {
'page': page,
'csrfmiddlewaretoken': window.CSRF_TOKEN
},
success: function(data) {
console.log(data)
if (data.has_next) {
link.data('page', page+1);
} else {
link.hide();
}
$('#posts').append(data.posts_html);
},
error: function(xhr, status, error) {
}
});
});