Tôi có một mô hình Django:
lớp Khách hàng (model.Model):
first_name=models.CharField(max_length=20,null=True, trống=True)
Last_name=models.CharField(max_length=25,null=True, trống=True)
address=models.CharField(max_length=60,null=True, trống=True)
address2=models.CharField(max_length=60,null=True, trống=True)
city=models.CharField(max_length=40,null=True, trống=True)
state=models.CharField(max_length=2,null=True, trống=True)
Từ đó, tôi đã tạo ModelForm:
lớp CustomerForm(forms.ModelForm):
lớp Meta:
người mẫu=Khách hàng
Tôi muốn có thể hiển thị các đoạn biểu mẫu trong mẫu của mình tương ứng với thông tin cụ thể mà người dùng có thể thay đổi. Ví dụ: nếu tôi muốn khách hàng thay đổi tên của họ, tôi muốn có thể hiển thị biểu mẫu chỉ có trường "first_name" và "last_name".
Một cách để thực hiện việc này là tạo ModelForm cho từng đoạn trường khác nhau... Đối với ví dụ về tên, nó sẽ trông như thế này:
lớp CustomerFormName(forms.ModelForm):
lớp Meta:
người mẫu=Khách hàng
field=('first_name','last_name')
Điều này trông rất không thanh lịch và không linh hoạt. Điều tôi muốn làm là có thể chỉ định các trường trong thời gian chạy, vì vậy khi tôi chuyển từ điển từ Chế độ xem sang mẫu, tôi chỉ có thể đặt các trường tôi muốn hiển thị. Làm cách nào để thiết lập điều này để các trường của biểu mẫu được đặt khi chạy? Lý tưởng nhất là tôi muốn từ điển cuối cùng được thông qua trông như thế này:
{'name_change_form':CustomerFormName(), 'address_change_form':CustomerFormName()}
Sau đó, tôi biết rằng bất cứ khi nào tôi xuất name_change_form.as_p, nó sẽ có các trường biểu mẫu mà tôi đang tìm kiếm.
ý tưởng? Vui lòng đề xuất các phương pháp tốt hơn.
từ django.forms nhập ModelForm
từ bất cứ nơi nào nhập khẩu Khách hàng
def formClassFactory(model,fields):
ff = trường
mm = mô hình
lớp formClass(ModelForm):
lớp Meta:
mô hình=mm
trường=ff
biểu mẫu trả vềClass
form_class = formClassFactory(('first_name','last_name') )
Tôi là một lập trình viên xuất sắc, rất giỏi!