Khi tạo trang phẳng, tôi muốn người dùng chọn mẫu từ danh sách được xác định trước. Để giữ cho các mô hình Flatpage
hoang sơ, tôi thích ChoiceField
qua ModelChoiceField
(sau này cung cấp PK của mẫu, nhưng tôi cần tên cho trường TEMPLATE_NAME):trường và base_fields - Django
class NewFlatpageForm(FlatpageForm):
template_name = forms.ChoiceField(choices = [])
def __init__(self, *args, **kwargs):
self.base_fields['template_name'].choices = ProjectTemplate.objects.values_list('path', 'name')
super(NewFlatpageForm, self).__init__(*args, **kwargs)
tôi ghi đè __init__
hoặc Django populates lựa chọn tại máy chủ bắt đầu và không cập nhật danh sách sau đó.
Tôi không có bất kỳ trải nghiệm quản trị nào, nhưng tôi đã làm những việc tương tự bằng cách sử dụng thuộc tính fields
khi không sử dụng quản trị viên. Tuy nhiên trong trường hợp này, tôi có một ngoại lệ nói fields
không phải là một thuộc tính của biểu mẫu. __dict__
cho tôi thấy có thuộc tính base_fields
và sử dụng thuộc tính. Vì vậy, tại sao sử dụng base_fields ở đây, và tại sao là fields
không có mặt và cuối cùng tôi đang làm một cái gì đó hacky?
Cảm ơn Daniel .. – shanyu