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 }}
Да, это так просто. Однако, если вычисления, которые вы делаете, можно сделать в базе данных, вы должны посмотреть в аннотации.