2010-05-16 29 views
5

Kullanıcılardan 'microroblog' minimal uygulamasında 100 karakter kaydetmeye çalışıyorum. Kodumda hiç sorun yok görünüyor, ancak çalışmıyor. Hata view.py konumunda, yabancı anahtarı kullanıcı masasına kaydedemiyorum.Form içeriğine kaydetme yapılamıyor

models.py şuna benzer: Burada ithalatı söz etmedi

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

- onlar zaten sağ bitti. Halamım views.py. Ben kurtarmaya çalışırken şöyle der: Ben bir parametre olarak created_py koyarsanız atama

önce başvurulan

yerel değişken 'created_by', kaydetme fazla parametre gerekiyor. Bu gerçekten garip.

+0

Girintiyi dört boşlukla girintili girin (veya seçin ve Ctrl + K tuşlarına basın). –

+0

Şuna şaşkınım: 'created_by = User.objects.get (created_by = user)', 'User' modelinin' created_by' sütununa sahip olduğundan emin misiniz? Bu olsa da, 'FieldError' ile başarısız olmalıdır. Ayrıca tam geri izleme faydalı olacaktır. –

cevap

7

Hatanın nerede olduğunu tam olarak bulmaya yardımcı olacak tam izini göstermezsiniz. (Bu, çalıştığınız kodun tam olarak geçerli olduğundan şüpheleniyorum, ya da asıl hata mesajı bu değil çünkü hata nedeniyle hata kodla eşleşmediğinden bahseder.)

Ancak, birkaç işaretçi. Öncelikle, tasarrufu yapmak için formu kullanmıyorsunuz. Eğer yapmış olsaydın, muhtemelen bu hatayı görmezdin. Değerleri istemden el ile almak yerine, formu request.POST kullanarak başlatmalı ve sonra bunu kaydetmelisiniz. Ayrıca, değerlerini kullanmaya çalışmadan önce formun gerçekten geçerli olduğunu kontrol etmiyorsunuz. Burada yapıyor olması gerekenler:

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

Ayrıca, müdür tamamen konunun dışında not olduğunu - Varsayılan yöneticisi daha önce de senin tam olarak aynı yapan create yöntemi tanımlar.

+0

çok teşekkürler! Olması gerektiği gibi çalışır :) – dana

+0

:) evet. şimdi onay işaretini görüyorum ve anlamını anladım :) kontrol ettim, anlattığın için teşekkürler :) – dana