Javascript 如何在views.py中为对象创建属性,以便将更改后的对象传递给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

我通过AJAX和分页加载“无止境滚动”提要。在将对象传递给JS代码之前,我需要向每个对象添加属性(或者称为属性?),其中包含布尔值,无论当前用户是否喜欢它。我认为它可能会起作用,但有些地方出了问题,因为前端的一切都变得不明确了。我如何以正确的方式实现我想要的东西?为每个对象创建属性是很重要的,因为以后只需获取与其他数据相同的循环就非常实用了

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)

在模型对象上设置这样的属性无效。在模型对象上设置这样的属性无效。