Django-добавить поле в queryset для хранения результатов вычислений

Я довольно новичок в Django и пришел из мира PHP. Я пытаюсь добавить поле в объект QuerySet после вычисления вещей, и не знаю как это сделать. В PHP я бы просто добавил столбец в массив и сохранил в нем свои вещи.

вот мой код:

def (id):
    mystuff_details    = mystuff_details.objects.filter(stuff_id=id)
    newthing = '';
    for mystuff in mystuff_details:
        newthing_lists = //some query to get another queryset
        for newthing_list in newthing_lists:
            newthing = newthing_list.stuffIwant
            //Here I want to make some computation, and ADD something to newthing, let's say:  
            to_add = (mystuff.score+somethingelse)
            //I've heard about the .append but I'm sure I'm screwing it up
            newthing.append(to_add)

поэтому в основном в моем шаблоне я хотел бы иметь возможность звонить: {% для newthing в списке newthings_list %} {{ newthing.to_add }} {%end %}

TL; DR: Я в принципе хочу извлеките список материалов из моей базы данных и добавьте в этот список объектов поле, которое будет содержать вычисленное значение.

Дайте мне знать, если это неясно, мне трудно переключиться с php на django haha.

спасибо!

EDIT:

Итак, я пытаюсь с помощью словаря, но мне, должно быть, не хватает логики:

def (id):
    mystuff_details    = mystuff_details.objects.filter(stuff_id=id)
    newthing = {};
    for mystuff in mystuff_details:
        newthing_lists = //some query to get another queryset
        for newthing_list in newthing_lists:
            //Newthing_list can have several times the same I, and the scores need to add up
            if newthing[newthing_list.id] > 0: //This doesn't seem to work and throws an error (KeyError)
                newthing[newthing_list.id] = newthing[newthing_list.id] + some_calculated_thing
            else: 
                newthing[newthing_list.id] = some_calculated_thing

и затем, когда я получу эту работу, я не знаю, как получить доступ к ней в шаблон:

 {% for id in my_list %}
     {{newthing[id]}} ? Or something like newthing.id ?
 {% end %}

спасибо!

2 ответов


почему бы не использовать словарь?

newthing = {}
newthing['your_key'] = to_add

в шаблоне, вы можете получить доступ к значениям словаря с:

{{newthing.your_key}}

или использовать цикл for, если у вас есть словарь словари


вы можете установить что угодно на объекте python:

for obj in self.model.objects.all() :
    obj.score = total_score / total_posts

это будет работать, даже если obj не имеет атрибута результат. В шаблоне запроса это так:

{{ obj.score }}

Да, это так просто. Однако, если вычисления, которые вы делаете, можно сделать в базе данных, вы должны посмотреть в аннотации.