2012-08-25 16 views
6

Soy bastante nuevo en Django y vengo del mundo de PHP. Estoy tratando de 'agregar' un campo a un conjunto de consulta después de calcular cosas, y no sé cómo hacerlo. En PHP, simplemente agregaría una columna en una matriz y almacenaría mis cosas en ella.Django - Agregar campo a queryset para almacenar los resultados de cálculo

Aquí está mi código:

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) 

Así que, básicamente, en mi plantilla que me gustaría ser capaz de llamar: { % para nuevoElemento en newthings_list%} {{ newthing.to_add}} {% end%}

TL; DR: Básicamente quiero recuperar una lista de cosas de mi base de datos, y en esta lista de objetos AGREGAR un campo que contendrá un valor calculado.

Avísame si no está claro, estoy teniendo dificultades para cambiar de php a django jaja.

Gracias!

EDIT:

Por lo tanto, estoy tratando con un dictionnary, pero debo estar perdiendo la lógica:

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 

Y luego, cuando voy a conseguir que el trabajo, no sé cómo acceder a él en la plantilla:

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

¡Gracias!

Respuesta

3

¿Por qué no utilizar un diccionario?

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

En la plantilla, puede acceder a los valores del diccionario con:

{{newthing.your_key}} 

O utilizar el bucle si tiene un diccionario de diccionarios

+0

¡Hola y gracias! Intenté con dictionnaries, esa es la parte posterior a la "edición" de mi pregunta, pero todavía no tengo suerte. ¿Qué he hecho mal en mi código? ¡Gracias! –

+0

Antes que nada, mira [escribiendo visitas en django] (https://docs.djangoproject.com/en/dev/topics/http/views/). En su opinión, debe devolver algo como 'return render_to_response ('my_template.html', my_data_dictionary, context_instance = RequestContext (request)) ' – smang

22

Puede definir cualquier cosa en un objeto de Python:

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

Esto funcionará incluso si obj no tiene un atributo de puntuación. En la plantilla, solicítelo de la siguiente manera:

{{ obj.score }} 

Sí, es así de simple. Sin embargo, si los cálculos que está haciendo se pueden hacer en la base de datos, debe consultar annotate.

+0

Sé que algunas personas pueden decir que esto es demasiado simple, pero esta es probablemente la La mejor solución simple que he visto para esto. –

+0

solución simple y mejor !! gracias @Melvyn – javed

Cuestiones relacionadas