2012-01-24 44 views
5

Tôi muốn có một hình thức ràng buộc từ một đối tượng để sử dụng phương pháp is_valid. Lý do là vì tôi có một số dữ liệu cũ mà tôi muốn người dùng chỉnh sửa theo các quy tắc xác thực mới. Sau đó, tôi muốn sử dụng lại mã của các phương thức sạch trong biểu mẫu của tôi.Chuyển đổi một hình thức không ràng buộc thành một hình thức bị ràng buộc?

tôi đã kết thúc tuần tự trả lời của tôi:

from django.utils import simplejson 
from django.core.serializers import serialize 

(...) 

fields_dict = simplejson.loads(serialize('json', [obj]))[0]['fields'] 
form = forms.MyForm(fields_dict) 
if form.is_valid 

này hoạt động nhưng nó không có vẻ rất Djangish. Ngoài ra, nó có vẻ như là một vấn đề phổ biến vì vậy tôi đang tìm kiếm một cách tốt hơn để làm điều này.

Theo tài liệu dịch dữ liệu từ không bị ràng buộc thành không liên kết, không có nghĩa là xảy ra: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method Tuy nhiên, đó sẽ là giải pháp dễ dàng nhất đối với tôi.

+0

Hãy nói cho tôi nếu tôi đã làm đúng: Bạn có dữ liệu cũ ở đâu đó và vì điều này đã được cứu, các quy tắc xác nhận thay đổi. Bây giờ bạn muốn sử dụng một ModelForm để xác nhận lại dữ liệu cũ và hiển thị lỗi cho người dùng? – Martin

+0

'obj' đến từ đâu? Điều này sẽ giúp xác định những gì đang xảy ra ở đây. –

+0

Chính xác @Penthi. Tôi nghĩ rằng oogles đã cho tôi những gì tôi đang tìm kiếm. Cảm ơn –

Trả lời

11

Có chức năng django.forms.models.model_to_dict của Django sẽ chuyển đổi phiên bản mô hình hiện tại của bạn thành từ điển dữ liệu phù hợp để liên kết với ModelForm.

Điều này có lẽ sẽ hiệu quả hơn và chắc chắn hơn "Djangish", hơn serialising và unserialising đối tượng.

Và nếu bạn cũng tạo biểu mẫu với từ khóa instance, nó sẽ biết cập nhật bản ghi hiện có khi được lưu.

Vì vậy:

from django.forms.models import model_to_dict 

... 

fields_dict = model_to_dict(obj) 
form = forms.MyForm(fields_dict, instance=obj) 
+1

Cảm ơn! Đây là những gì tôi đang tìm kiếm. –

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