2012-10-13 26 views
15

tôi tiếp tục nhận được lỗi:dữ liệu Django ManagementForm là mất tích hoặc đã bị giả mạo

[u'ManagementForm data is missing or has been tampered with'] 

tôi không thể tìm ra lý do tại sao một trong hai. Đây là quan điểm của tôi:

def CreateWorkout(request): 
    WorkoutInlineFormSet = inlineformset_factory(workout,exercise) 
    if request.method == "POST" : 
     formset = WorkoutInlineFormSet(request.POST) 

     if formset.is_valid(): 
      formset.save(); 
    else: 
     formset = WorkoutInlineFormSet() 
    return render_to_response('submit.html',{'formset': formset},context_instance=RequestContext(request)) 

Và đây là mẫu của tôi:

<body> 
<form method="POST" action =""> 
{{ formset.management_form }} 
<table> 
{% for form in formset.forms %} 
      {{ form }} 
     {% endfor %} 

     </table> 
</form> 
</body> 

Tôi đã đọc rằng bạn phải bao gồm các formset.management_form, và tôi có. Tôi nghĩ rằng đó sẽ là một sửa chữa dễ dàng, nhưng tôi đã không thể tìm ra vấn đề.

+0

Bạn có đang hiển thị đúng mẫu không? Dường như không có nút gửi. – Rohan

+0

kiểm tra nếu bạn không có lỗi đánh máy trong tên biểu mẫu trong mẫu của mình – maazza

Trả lời

5

Khi bạn sử dụng bộ định dạng nội tuyến, bạn cần cung cấp cá thể mà các đối tượng liên quan đến.

# First, fetch the instance from the db 
workout = code_that_fetches_instance() 

if request.method == "POST" : 
    formset = WorkoutInlineFormSet(request.POST, instance=workout) 
    ... 
else: 
    formset = WorkoutInlineFormSet(instance=workout) 

Xem ví dụ trong tài liệu trên using an inline formset in a view để biết thêm thông tin.

Nếu workoutexercise là mô hình của bạn, bạn nên thực hiện theo quy ước python và đổi tên chúng WorkoutExercise. Chữ thường workout phải là cá thể mà tất cả các bài tập trong bộ định dạng của bạn được liên kết đến.

+0

Vẫn là lỗi tương tự. Lỗi xảy ra trong quá trình khai báo cho formset bên dưới request.method == "POST" –

+0

Sau khi thực hiện thay đổi, bạn đã tải lại mã và đưa ra yêu cầu mới trước khi gửi lại? Vui lòng cập nhật câu hỏi của bạn với đầu ra html khi bạn thực hiện yêu cầu nhận được với thay đổi được đề xuất của tôi. – Alasdair

+0

Tôi đã cập nhật nó –

4

Tôi gặp phải sự cố này.

Lý do là KHÔNG có cái gì như form-TOTAL_FORMS, form-INITIAL_FORMS and form-MAX_NUM_FORMS) trong dữ liệu POST của bạn.

Bạn nên sử dụng {{ formset.as_p }}, điều này sẽ hiển thị dữ liệu management_form từ bộ định dạng. Nếu bạn muốn hiển thị biểu mẫu tùy chỉnh, bạn không nên quên tệp management_form của biểu mẫu để cho phép dữ liệu POST có dữ liệu mangement_form.

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