2011-09-08 26 views
25

Tôi đã tạo một lớp ModelForm để có thể tạo và chỉnh sửa các mục nhập cơ sở dữ liệu. Tạo các mục mới hoạt động tốt, tuy nhiên, tôi không biết cách sử dụng ModelForms để chỉnh sửa/cập nhật mục nhập hiện có. Tôi có thể nhanh chóng một ModelForm với một trường hợp cơ sở dữ liệu sử dụng:Django: sử dụng ModelForm để chỉnh sửa mục nhập cơ sở dữ liệu hiện có

form = MyModelForm(instance=MyModel.objects.get(pk=some_id)) 

Tuy nhiên, khi tôi chuyển thông tin này đến một khuôn mẫu và chỉnh sửa một lĩnh vực và sau đó cố gắng tiết kiệm nó, tôi tạo ra một mục cơ sở dữ liệu mới thay vì cập nhật "some_id" ?

Edit1: Đây là quan điểm của tôi

def editData(request): 
if request.method == 'POST': 
    form = MyModelForm(request.POST, request.FILES) 

    if form.is_valid(): 
     editedEntry = form.save() # <-- creates new entry, instead of updating 
+0

Bạn có thể gửi views.py của bạn? –

Trả lời

38

Hãy nhớ rằng bạn vẫn cần phải sử dụng tham số instance khi bạn nhanh chóng trên POST.

instance = MyModel.objects.get(whatever) 
if request.method == "POST": 
    form = MyModelForm(request.POST, instance=instance) 
    ... 

else: 
    form = MyModelForm(instance=instance) 
+1

Ok tôi đã không làm điều đó. Vì vậy, làm thế nào tôi nên vượt qua khóa chính của tôi "some_id" mẫu html và trở lại một lần nữa để xem. Tôi có nên làm điều đó bằng tay như một lĩnh vực hình thức ẩn hoặc là có một cách để có Django chăm sóc nó? – WesDec

+0

Không cần phải làm điều đó. Chỉ cần sử dụng các mô hình như tôi hiển thị ở trên. –

+0

Nhưng để làm điều này: dụ = MyModel.objects.get (bất cứ điều gì), tôi cần phải thay thế "bất cứ điều gì" với khóa chính "some_id" mà tôi sử dụng để tạo ra MyModelForm ban đầu. Từ đâu tôi có được điều đó? – WesDec

0

Cũng có thể và hơi ngắn hơn:

instance = MyModel.objects.get(whatever) 
form = MyModelForm(request.POST or None, instance=instance) 
... 
Các vấn đề liên quan