2010-05-16 2 views
5

Sto tentando di salvare 100 caratteri utente modulo in un'applicazione minima 'microblog'. Il mio codice sembra non avere alcun mystakes, ma non funziona. L'errore è in views.py, non riesco a salvare la chiave esterna nella tabella utente.Impossibile salvare il contenuto del modulo nel database

models.py assomiglia a questo:

class NewManager(models.Manager): 

    def create_post(self, post, username): 
new = self.model(post=post, created_by=username) 
     new.save() 
     return new 

class New(models.Model): 

    post = models.CharField(max_length=120) 
    date = models.DateTimeField(auto_now_add=True) 
    created_by = models.ForeignKey(User, blank=True) 
    objects = NewManager() 


class NewForm(ModelForm): 

    class Meta: 
      model = New 
      fields = ['post'] 
     # widgets = {'post': Textarea(attrs={'cols': 80, 'rows': 20}) 

def save_new(request): 

    if request.method == 'POST': 
     created_by = User.objects.get(created_by = user) 
     date = request.POST.get('date', '') 
     post = request.POST.get('post', '') 
     new_obj = New(post=post, date=date, created_by=created_by) 
     new_obj.save() 
     return HttpResponseRedirect('/') 
    else: 
      form = NewForm()  
    return render_to_response('news/new_form.html', {'form': form},context_instance=RequestContext(request)) 

non ho menzionato le importazioni qui - hanno finito a destra, in ogni caso. Il mio errore è in views.py. Quando provo a salvarlo dice:

locale variabile 'created_by' fatto riferimento prima dell'assegnazione

Se metto created_py come parametro, il salvataggio ha bisogno di più parametri. È davvero strano

+0

Inserire il codice di quattro spazi (o selezionarlo e premere Ctrl + K). –

+0

Sono perplesso da questo: 'created_by = User.objects.get (created_by = user)', sei sicuro che il modello 'User' ha' created_by' column? Questo dovrebbe fallire con 'FieldError' però. Anche il traceback completo sarebbe utile. –

risposta

7

Non viene mostrato il traceback completo, il che consentirebbe di individuare esattamente dove si verifica l'errore. (Sospetto che questo non sia il codice esatto che stai correndo, o che non sia il vero messaggio di errore, perché come dice rebus l'errore non corrisponde al codice.)

Tuttavia, un paio di puntatori. Innanzitutto, non sembra che tu stia usando il modulo per fare il salvataggio. Se lo hai fatto, probabilmente non vedresti questo errore. Anziché ottenere manualmente i valori dalla richiesta, è necessario creare un'istanza del modulo utilizzando request.POST e quindi salvarlo. Inoltre, non stai controllando che il modulo sia effettivamente valido prima di provare a usare i suoi valori. Ecco cosa si dovrebbe fare:

if request.method == 'POST': 
    form = NewForm(request.POST) 
    if form.is_valid(): 
     new_obj = form.save(commit=False) 
     new_obj.created_by = request.user 
     new_obj.save() 
     return HttpResponseRedirect('/') 
else: 
    form = NewForm() 
return render_to_response('news/new_form.html', {'form': form}, 
          context_instance=RequestContext(request)) 

Inoltre, nota che il gestore è del tutto irrilevante - il manager di default definisce già un metodo create, che fa esattamente uguali ai suoi.

+0

grazie mille! funziona esattamente come dovrebbe :) – dana

+0

:) si. ora vedo il segno di spunta e capisco il suo significato :) ho controllato, grazie per avermelo detto :) – dana