2010-05-16 11 views
5

Ich versuche, 100 Zeichen Formularbenutzer in einer "Microblog" -Minimalanwendung zu speichern. Mein Code scheint keine Mystakes zu haben, funktioniert aber nicht. Der Fehler ist in views.py, ich kann den Fremdschlüssel nicht in der Benutzertabelle speichern.Formularinhalt kann nicht in Datenbank gespeichert werden

models.py sieht wie folgt aus:

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)) 

ich nicht Importe hier erwähnt haben - sie sind richtig gemacht, sowieso. Mein Fehler ist in views.py. Wenn ich versuche, es zu retten, sagt:

lokale Variable ‚created_by‘ vor der Zuweisung verwiesen

Wenn ich created_py als Parameter setzen, die sparen mehr Parameter benötigt. Es ist wirklich komisch.

+0

Code um vier Leerzeichen einrücken (oder auswählen und Strg + K drücken). –

+0

Ich bin verwirrt: 'created_by = User.objects.get (created_by = user)', bist du sicher, 'User' Modell hat' created_by' Spalte? Dies sollte jedoch mit 'FieldError' fehlschlagen. Auch eine vollständige Rückverfolgung wäre hilfreich. –

Antwort

7

Sie zeigen nicht die vollständige Traceback, was dazu beitragen würde, genau aufzufinden, wo der Fehler auftritt. (Ich vermute, das ist nicht der genaue Code, den Sie ausführen, oder das ist nicht die eigentliche Fehlermeldung, denn wie rebus erwähnt der Fehler nicht den Code.)

Allerdings ein paar Zeiger. Erstens scheinen Sie das Formular nicht zum Speichern zu verwenden. Wenn Sie dies tun würden, würden Sie diesen Fehler wahrscheinlich nicht sehen. Anstatt die Werte manuell von der Anforderung abzurufen, sollten Sie das Formular unter Verwendung von request.POST instanziieren und dann speichern. Außerdem überprüfen Sie nicht, dass das Formular tatsächlich gültig ist, bevor Sie versuchen, seine Werte zu verwenden. Hier ist, was Sie tun sollten:

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)) 

Beachten Sie auch, dass Ihr Manager völlig irrelevant ist - der Standard-Manager definiert bereits eine create Methode, die genau die gleiche Funktion wie bei Ihnen.

+0

vielen dank! es funktioniert genauso wie es sollte :) – dana

+0

:) ja. Jetzt sehe ich das Häkchen und verstehe seine Bedeutung :) Ich habe überprüft, danke, dass du mir das gesagt hast :) – dana

Verwandte Themen