2012-08-25 2 views
6

Sono piuttosto nuovo per Django e provengo dal mondo PHP. Sto cercando di "aggiungere" un campo a un queryset dopo aver calcolato le cose, e non so come farlo. In PHP vorrei solo aggiungere una colonna in un array e memorizzare le mie cose in esso.Django - Aggiungi il campo al queryset per archiviare i risultati del calcolo

Ecco il mio codice:

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) 

Quindi, in pratica nel mio modello Mi piacerebbe essere in grado di chiamare: {% per newthing in% newthings_list} {{ newthing.to_add}} { % end%}

TL; DR: Fondamentalmente voglio recuperare un elenco di cose dal mio database e in questo elenco di oggetti ADD un campo che conterrà un valore calcolato.

Fammi sapere se non è chiaro, ho difficoltà a passare da php a django haha.

Grazie!

EDIT:

Quindi, sto cercando con un Dictionnary, ma devo essere manca la logica:

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 

E poi, quando avrò che il lavoro, non lo so come accedervi nel modello:

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

Grazie!

risposta

3

Perché non utilizzare un dizionario?

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

Nel modello, è possibile accedere ai valori del dizionario con:

{{newthing.your_key}} 

Oppure utilizzare il ciclo for, se si dispone di un dizionario di dizionari

+0

Ciao e grazie! Ho provato con i dizionari, questa è la parte dopo la "modifica" nella mia domanda, ma non ho avuto fortuna per ora. Cosa ho fatto di sbagliato nel mio codice? Grazie! –

+0

Prima di tutto, dai un'occhiata a [writing views in django] (https://docs.djangoproject.com/en/dev/topics/http/views/). Secondo te, devi restituire qualcosa come 'return render_to_response ('my_template.html', my_data_dictionary, context_instance = RequestContext (richiesta)) ' – smang

22

È possibile impostare qualsiasi cosa su un oggetto pitone:

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

Funzionerà anche se obj non ha un attributo punteggio. Nel modello richiedilo in questo modo:

{{ obj.score }} 

Sì, è così semplice. Tuttavia, se i calcoli che stai facendo possono essere fatti nel database, dovresti esaminare annotate.

+0

So che alcune persone potrebbero dire che questo è troppo semplice, ma questo è probabilmente il la migliore soluzione semplice che ho visto per questo. –

+0

soluzione semplice e migliore !! grazie @Melvyn – javed