Me gustaría crear un formulario que incluya campos de dos modelos separados, junto con algunos otros campos regulares (no modelo). El formulario creará una instancia de cada modelo. Yo no piensa Puedo usar formularios en línea para esto, ya que no quiero incluir todos los campos de ambos modelos.Obtiene el campo de formulario de Django del campo modelo
Me gustaría crear el campo de formulario sin codificar el tipo de campos del modelo.
Sé que puedo obtener un campo de formulario de un campo modelo usando model_field.formfield()
. Pero, ¿cómo puedo obtener el campo de modelo específico?
Mi primera solución:
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 = ...
¿Existe un equivalente de get_fields
ya? ¿Es una mala idea? Me incomoda confiar en el atributo modelo _meta
. ¿O estoy yendo sobre esto de una manera completamente equivocada?
Su solución me suena razonable, Altho, no veo por qué usted no desea codificar los 2 campos; quizás obtienes los modelos dinámicamente. –
Quiero evitar la codificación forzada del tipo de campo de formulario en caso de que alguna vez cambie el tipo del campo de modelo correspondiente. ¿No estás seguro de lo que querías decir sobre cómo obtener los modelos dinámicamente ...? – harto