Я хотел бы создать форму, включающую поля из двух отдельных моделей, а также некоторые другие регулярные (немодельные) поля. Форма создаст экземпляр каждой модели. Я не думаю, что я могу использовать встроенные формы для этого, так как я не хочу включать все поля из обеих моделей.
Я хотел бы создать поле формы без жесткого кодирования типа полей модели.
Я знаю, что я могу получить поле формы из поля модели, используя model_field.formfield()
. Но как я могу получить конкретное поле модели?
Мое первое решение:
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 = ...
Существует ли уже эквивалент get_fields
? Это плохая идея? Мне неудобно полагаться на атрибут _meta
. Или я об этом совершенно неправильно?