2013-08-16 28 views
12

Self.instance trong Django ModelForm constructor có nghĩa là gì và tôi có thể tìm tài liệu về nó ở đâu?self.instance trong Django ModelForm

class MyModelForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyModelForm, self).__init__(*args, **kwargs) 
     if self.instance: 
     ... 
+3

Đây không phải là điều Python chung. Đây là một cái gì đó được định nghĩa đặc biệt bởi 'ModelForm', trong superclass' __init__'. –

+0

Cảm ơn, tôi đã sửa đổi tiêu đề câu hỏi. – jazzblue

Trả lời

9

Trong ModelForm, self.instance bắt nguồn từ thuộc tính model được chỉ định trong lớp Meta. self trong ngữ cảnh này rõ ràng là một thể hiện của lớp con của ModelForm và self.instance (và sẽ lưu biểu mẫu không có lỗi) một thể hiện của lớp mô hình mà bạn đã chỉ định, mặc dù bạn không làm như vậy trong ví dụ của mình.

Truy cập tự phục hồi trong __init__ có thể không hoạt động, mặc dù làm như vậy sau khi gọi số __init__ của phụ huynh có thể sẽ xảy ra. Hơn nữa, tôi sẽ không khuyên bạn nên thay đổi trực tiếp cá thể. Nếu bạn quan tâm, hãy xem mã BaseModelForm trên Github. Bạn cũng có thể chỉ định instance khi tạo biểu mẫu mới qua đối số instance.

7

Bạn có thể tìm tài liệu trên trang web của django.

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-clean-method

Chỉ cần tìm kiếm trang cho mỗi tài liệu tham khảo để "dụ", và bạn sẽ tìm thấy những gì bạn cần.

# Load up an instance 
my_poll = Poll.objects.get(id=1) 

# Declare a ModelForm with the instance 
my_form = PollForm(request.POST, instance=my_poll) 

# save() will return the model_form.instance attr which is the same as the model passed in 
my_form.save() == my_poll == my_form.instance 
Các vấn đề liên quan