Al crear una página plana, quiero que el usuario seleccione una plantilla de una lista predefinida. Con el fin de mantener el modelo Flatpage
intacta, prefiero ChoiceField
sobre ModelChoiceField
(este último proporciona la FC de la plantilla, pero necesito el nombre para el campo template_name):fields and 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)
puedo reemplazar __init__
o Django rellena opciones en inicio del servidor y no actualiza la lista a continuación.
No tengo experiencia en administración, pero hice cosas similares utilizando el atributo fields
cuando no se usa admin. Sin embargo, en este caso, recibí una excepción que dice fields
no es un atributo del formulario. __dict__
me mostró que hay un atributo base_fields
y su uso funciona. Entonces, ¿por qué usar base_fields aquí, y por qué fields
no está presente y finalmente estoy haciendo algo hacky?
Gracias Daniel .. – shanyu