创建一个平面页面时,我希望用户可以从预定义的列表中选择模板。为了不改变Flatpage
模型,我更喜欢使用ChoiceField
而不是ModelChoiceField
(后者提供模板的PK,但我需要模板名称用于template_name字段):
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)
我覆盖了__init__
,或者Django在服务器启动时填充选项,然后不会更新列表。
我没有任何管理经验,但是在不使用管理时,我使用fields
属性进行类似的操作。但是在这种情况下,我收到了一个异常,告诉我fields
不是表单的属性。__dict__
向我展示了一个base_fields
属性,并使用它可以解决问题。因此,在这里为什么要使用base_fields
?为什么不存在fields
,最后,我是否在做一些 hacky 的事情?
base_fields
属性..." - undefined