Невозможно временно добавить данные в экземпляр без сохранения в базе данных Django - PullRequest
0 голосов
/ 04 июня 2018

У меня есть набор Последствий , и у этих последствий есть лайков ManyToManyField, который хранит всех пользователей, у которых есть подобные последствия.

Что я хочуархив должен добавить к последствиям дополнительный временной вызов атрибута isLiked

Так что позже в шаблоне я могу добавить атрибут данных в html, указывающий, что пользователь запроса уже понравилсяПоследствия X.

Я пытаюсь сделать это с помощью этого подхода:

views.py

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

Python:3.6.5

1 Ответ

0 голосов
/ 05 июня 2018

Я наконец решил это так:

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
...