Javascript 如何在views.py中为对象创建属性,以便将更改后的对象传递给JS代码
我通过AJAX和分页加载“无止境滚动”提要。在将对象传递给JS代码之前,我需要向每个对象添加属性(或者称为属性?),其中包含布尔值,无论当前用户是否喜欢它。我认为它可能会起作用,但有些地方出了问题,因为前端的一切都变得不明确了。我如何以正确的方式实现我想要的东西?为每个对象创建属性是很重要的,因为以后只需获取与其他数据相同的循环就非常实用了Javascript 如何在views.py中为对象创建属性,以便将更改后的对象传递给JS代码,javascript,python,ajax,django,Javascript,Python,Ajax,Django,我通过AJAX和分页加载“无止境滚动”提要。在将对象传递给JS代码之前,我需要向每个对象添加属性(或者称为属性?),其中包含布尔值,无论当前用户是否喜欢它。我认为它可能会起作用,但有些地方出了问题,因为前端的一切都变得不明确了。我如何以正确的方式实现我想要的东西?为每个对象创建属性是很重要的,因为以后只需获取与其他数据相同的循环就非常实用了 def loadmore(request,page_number): answers_to_questions_objects = Question
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)
serializer.serialize
将只包括模型字段。它不包括您在模型对象上设置的属性。相反,制作一个dict,并将作为键添加到其中
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)
更新:
如果必须实现很多类似这样的视图,那么应该签出django rest框架。serializer api和它附带的通用视图使生活更加轻松。序列化程序。serialize
将只包括模型字段。它不包括您在模型对象上设置的属性。相反,制作一个dict,并将作为键添加到其中
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)
更新:
如果必须实现很多类似这样的视图,那么应该签出django rest框架。它附带的序列化程序api和通用视图使生活变得更加轻松
我需要向每个包含布尔值的对象添加属性(或者称为属性?),无论当前用户是否喜欢它
作为模型本身的一种方法,它更适合:
课堂问题(models.Model):
“”“网站上的问题。”“”
# …
用户(自身、用户)对用户的定义:
“”“用户喜欢这个问题吗?”“
profile_users={p.user for p in self.who_like}
喜欢=(配置文件中的用户\u用户)
喜欢的回报
这样,视图就可以访问任何问题实例的Question.liked\u by\u user(当前用户)
这里没有显示模型定义的一部分,因此我将猜测一个完整的示例:
#models.py
从django.contrib.auth.models导入用户
从django.db导入模型
类UserProfile(models.Model):
“”“用户的配置文件详细信息。”“”
user=models.ForeignKey(用户)
课堂提问(models.Model):
“”“网站上的问题。”“”
回答日期=models.DateField()
用户(自身、用户)对用户的定义:
“”“用户喜欢这个问题吗?”“
profile_users={p.user for p in self.who_like}
喜欢=(配置文件中的用户\u用户)
喜欢的回报
类(models.Model):
“”“表示用户喜欢某个问题的标志。”“”
question=models.ForeignKey(问题,相关的\u name='who\u like')
user\u profile=models.ForeignKey(UserProfile)
我需要向每个包含布尔值的对象添加属性(或者称为属性?),无论当前用户是否喜欢它
作为模型本身的一种方法,它更适合:
课堂问题(models.Model):
“”“网站上的问题。”“”
# …
用户(自身、用户)对用户的定义:
“”“用户喜欢这个问题吗?”“
profile_users={p.user for p in self.who_like}
喜欢=(配置文件中的用户\u用户)
喜欢的回报
这样,视图就可以访问任何问题实例的Question.liked\u by\u user(当前用户)
这里没有显示模型定义的一部分,因此我将猜测一个完整的示例:
#models.py
从django.contrib.auth.models导入用户
从django.db导入模型
类UserProfile(models.Model):
“”“用户的配置文件详细信息。”“”
user=models.ForeignKey(用户)
课堂提问(models.Model):
“”“网站上的问题。”“”
回答日期=models.DateField()
用户(自身、用户)对用户的定义:
“”“用户喜欢这个问题吗?”“
profile_users={p.user for p in self.who_like}
喜欢=(配置文件中的用户\u用户)
喜欢的回报
类(models.Model):
“”“表示用户喜欢某个问题的标志。”“”
question=models.ForeignKey(问题,相关的\u name='who\u like')
user\u profile=models.ForeignKey(UserProfile)
在模型对象上设置这样的属性无效。在模型对象上设置这样的属性无效。