Tôi muốn tạo biểu mẫu bao gồm các trường từ hai mô hình riêng biệt, cùng với một số trường thông thường (không phải mô hình) khác. Biểu mẫu sẽ tạo một phiên bản của từng mô hình. Tôi không nghĩ rằng Tôi có thể sử dụng các biểu mẫu nội tuyến cho điều này vì tôi không muốn bao gồm tất cả các trường từ cả hai mô hình.Lấy trường biểu mẫu Django từ trường mô hình
Tôi muốn tạo trường biểu mẫu mà không cần mã hóa cứng loại trường mô hình.
Tôi biết tôi có thể lấy trường biểu mẫu từ trường mô hình bằng cách sử dụng model_field.formfield()
. Nhưng làm thế nào tôi có thể nhận được trường mô hình cụ thể?
giải pháp đầu tiên của tôi:
def get_fields(model_class):
fields = {}
for f in model_class._meta.fields:
fields[f.name] = f
class MyForm(forms.Form):
foo_name = get_fields(Foo)['name'].formfield()
bar_name = get_fields(Bar)['name'].formfield()
other_field = ...
Có tương đương của get_fields
chưa? Đây có phải là một ý tưởng tồi không? Tôi không thoải mái dựa vào mô hình thuộc tính _meta
. Hoặc tôi đang đi về điều này một cách hoàn toàn sai?
giải pháp của bạn nghe có vẻ hợp lý với tôi, altho, tôi không thấy lý do tại sao bạn không muốn cứng mã những 2 lĩnh vực; có lẽ bạn sẽ có được các mô hình động. –
Tôi muốn tránh mã hóa cứng loại trường biểu mẫu trong trường hợp tôi đã từng thay đổi loại trường mô hình tương ứng. Bạn không chắc chắn về ý nghĩa của việc tạo mô hình động ...? – harto