代码之家  ›  专栏  ›  技术社区  ›  Roberto Fernandez Diaz

如果不保存在数据库django上,则无法将临时数据添加到实例

  •  0
  • Roberto Fernandez Diaz  · 技术社区  · 7 年前

    我有一套 后果 这样的后果是 喜欢 manytomanyfield属性,存储所有具有相同结果的用户。

    我想归档的是在结果中添加一个额外的时间属性调用 喜欢的

    因此,在模板的后面,我可以向html添加一个数据属性,指示请求的用户已经喜欢了x个结果。

    我试着用这种方法:

    VIEW

    def list_consequences(request, proponsal_id):
        try:
    
            consequences: [Consequence] = Consequence.objects.filter(of_proponsal=proponsal_id)
    
            user_likes =request.user.likes_consequences.get_queryset()
    
            union = consequences | user_likes
    
            for consequence in union:
                aux =consequences.get(pk=consequence.pk)
                aux.isLiked=True
    
    
            pros: Consequence = consequences.filter(efecto=Consecuencia.PRO)
            against: Consequence = consequences.filter(efecto=Consecuencia.AGAINST)
    
            template = loader.get_template('participation/consequences.html')
    
    
            context = {
                'pros': pros,
                'against': against,
                'is_user_authenticated': str(request.user.is_authenticated).lower(),
            }
            return HttpResponse(template.render(context, request))
    
        except Consequence.DoesNotExist:
            raise Http404("The consequence with id doesn't exist")
    

    所以稍后在模板上我可以这样做:

    结果.html

    ...
    {% for pro  in pros %}
    <button data-is-liked={{pro.isLiked}}> icon</button>
    {% endfor %}
    ...
    

    有人知道我怎么做吗?

    提前谢谢

    django版本:2.0

    蟒蛇:3.6.5

    1 回复  |  直到 7 年前
        1
  •  0
  •   Roberto Fernandez Diaz    7 年前

    我终于这样解决了:

    def _getConsequences(user: User, proponsal_id):
        consequences: [consequence] = Consequence.objects.filter(of_proponsal=proponsal_id)
        user_likes = user.like_consequence.get_queryset()
        pros: Consequence = consequences.filter(efect=Consecuencia.PRO)
    
        union = pros & user_likes
        pro_extra_data = []
        for pro in pros:
            if pro in union:
                pro.isLiked = True
            else:
                pro.isLiked = False
            pro_extra_data.append(pro)
    
        #... same procedure for contra_extra_data
    
    
        return pro_extra_data, contra_extra_data