2010-05-16 22 views
5

Tôi đang cố lưu 100 người dùng dạng ký tự trong ứng dụng tối thiểu 'microblog'. Mã của tôi dường như không có bất kỳ bí ẩn nào, nhưng không hoạt động. Lỗi ở trong views.py, tôi không thể lưu khoá ngoại vào bảng người dùng.Không thể lưu nội dung biểu mẫu vào cơ sở dữ liệu

models.py trông như thế này:

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

tôi không đề cập đến hàng nhập khẩu ở đây - họ đang làm đúng, dù sao. Lỗi của tôi là trong views.py. Khi tôi cố gắng tiết kiệm nó nói:

địa phương biến 'created_by' tham chiếu trước khi phân

Nếu tôi đặt created_py như một tham số, tiết kiệm cần thêm tham số. Nó thực sự kỳ lạ.

+0

Mã thụt lề bằng bốn dấu cách (hoặc chọn nó và nhấn Ctrl + K). –

+0

Tôi bối rối bởi điều này: 'created_by = User.objects.get (created_by = user)', bạn có chắc 'Mô hình người dùng' có cột' created_by' không? Điều này sẽ thất bại với 'FieldError'. Ngoài ra traceback đầy đủ sẽ được hữu ích. –

Trả lời

7

Bạn không hiển thị truy xuất hoàn chỉnh, điều này sẽ giúp theo dõi chính xác vị trí xảy ra lỗi. (Tôi nghi ngờ đây không phải là mã chính xác mà bạn đang chạy, hoặc đó không phải là thông báo lỗi thực sự, bởi vì như lời nhắc lại đề cập đến lỗi không khớp với mã.)

Tuy nhiên, một vài gợi ý. Thứ nhất, bạn dường như không sử dụng biểu mẫu để thực hiện việc lưu. Nếu bạn đã làm, bạn có thể sẽ không thấy lỗi này. Thay vì nhận các giá trị theo cách thủ công từ yêu cầu, bạn nên khởi tạo biểu mẫu bằng cách sử dụng request.POST và sau đó lưu. Ngoài ra, bạn không kiểm tra xem biểu mẫu có thực sự hợp lệ hay không trước khi cố gắng sử dụng các giá trị của nó. Dưới đây là những gì bạn nên làm:

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

Ngoài ra, lưu ý rằng quản lý của bạn là hoàn toàn không liên quan - người quản lý mặc định đã định nghĩa một phương pháp create, mà không hoàn toàn giống như bạn.

+0

cảm ơn rất nhiều! nó hoạt động giống như nó cần :) – dana

+0

:) có. bây giờ tôi thấy dấu kiểm, và hiểu ý nghĩa của nó :) tôi đã kiểm tra, cảm ơn đã nói với tôi :) – dana

Các vấn đề liên quan