我通过 AJAX 和分页加载“无尽滚动”提要。在将对象传递给 JS 代码之前,我需要为每个对象添加属性(或者称为属性?),其中包含 bool 值,无论当前用户是否喜欢它。我认为它可能有效,但出了点问题,因为前端的所有内容都未定义。我如何以正确的方式实现我想要的?为每个对象创建属性非常重要,因为稍后只需像其他数据一样通过循环获取它就非常实用。
def loadmore(request,page_number):
answers_to_questions_objects = Question.objects.filter(whom=request.user.profile).filter(answered=True).order_by('-answered_date')
paginator = Paginator(answers_to_questions_objects,10)
current_page = (paginator.page(page_number))
for item in current_page:
if request.user.profile in item.who_liked.all():
item.liked = True
else:
item.liked = False
print(current_page.liked)
answers = serializers.serialize('json', current_page)
data = {
'answers': answers,
}
return Response(data)
最佳答案
serializers.serialize
将仅包含模型字段。它不会包含您在模型对象上设置的属性。相反,创建一个字典并将 liked
作为键添加到其中。
import json
def loadmore(request,page_number):
# I added prefetch, so it will avoid making queries inside your loop.
answers_to_questions_objects = Question.objects.filter(whom=request.user.profile).filter(answered=True).order_by('-answered_date').prefetch_related('who_liked')
paginator = Paginator(answers_to_questions_objects,10)
current_page = (paginator.page(page_number))
# I don't know why Question model objects are called answers.
answers = []
for item in current_page:
item_dict = { 'whom': item.whom.name,
'id': item.id,
# Add the other required fields.
}
if request.user.profile in item.who_liked.all():
item_dict['liked'] = True
else:
item_dict['liked'] = False
answers.append(item_dict)
data = {
'answers': json.dumps(answers),
}
return Response(data)
更新:
如果您必须实现很多这样的 View ,您应该查看django-rest-framework
。序列化器 API 和它附带的通用 View 让生活变得更加轻松。
关于javascript - 如何为views.py中的对象创建属性,以便将更改后的对象传递给JS代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40878287/