2011-01-02 35 views
5

Giả sử tôi muốn tạo và cập nhật mô hình. Trường nào được hiển thị và loại xác thực phụ thuộc vào hành động (tạo hoặc cập nhật). Nhưng họ vẫn chia sẻ rất nhiều sự xác nhận và chấm dứt giống nhau. Có cách nào sạch sẽ để có một ModelForm xử lý này (bên cạnh chỉ là nếu dụ tồn tại ở khắp mọi nơi) hoặc tôi nên chỉ cần tạo ra hai hình thức mô hình khác nhau?Mẫu thiết kế Django - Biểu mẫu để tạo và cập nhật mẫu

Trả lời

4

Hai khả năng sẽ xuất hiện trong tâm trí bạn. Bạn có thể thiết lập một thuộc tính trong phương pháp của hình thức __init__, hoặc dựa trên một tham số bạn một cách rõ ràng vượt qua trong, hoặc dựa vào việc self.instance tồn tại và có một tổ chức phi-Không pk:

class MyModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     # either: 
     self.edit = kwargs.pop('edit', False) 
     # or: 
     self.edit = hasattr(self, instance) and self.instance.pk is not None 
     super(MyModelForm, self).__init__(*args, **kwargs) 
     # now modify self.fields dependent on the value of self.edit 

Các tùy chọn khác là để phân lớp ModelForm của bạn - giữ chức năng chung trong lớp cơ sở, sau đó tạo chức năng tạo hoặc cập nhật cụ thể trong các lớp con.

+0

tuyệt, đó cũng là những gì tôi đang nghĩ. Đã tự hỏi nếu có một số cách tốt hơn để làm điều đó, nhưng điều này có vẻ tốt với tôi. – killerbarney