Django динамически заполняет форму Model моделью - возможно ли это?
Я пытаюсь использовать модель формы независимо от передаваемой модели. Моя цель состоит в том, чтобы иметь список таблиц базы данных, где пользователь может выбрать таблицу, которая затем отображается. Затем в этой таблице есть возможность выбрать запись таблицы, которая может быть обновлена. Со временем таблицы будут меняться, поэтому я хочу использовать одну форму модели, чтобы включить все поля для редактирования и просто изменить базовую модель.
Я попробовал несколько вещей, и сейчас это моя «последняя» попытка, которая не работает. Какие-нибудь советы или рекомендации?
Это в моем файле views.py
class DynamicModelForm(forms.ModelForm):
class Meta:
model = None
fields = '__all__'
# setting the model based on the input selection of user
def get_dynamic_form(request, model, instance=None):
DynamicModelForm.model = model
DynamicModelForm.fields = '__all__'
return DynamicModelForm(request.POST or None , instance=instance)
#
#
#
# in my class based view I am using this to list the tables
def list(self, request, model, model_name):
print(f'Pulling model {model_name}')
objects = model.objects.all()
fields = [field.name for field in model._meta.fields] # Retrieve field names
self.context['fields'] = fields
self.context['model_name'] = model_name
self.context['objects'], self.context['info'] = set_pagination(request, objects)
if not self.context['objects']:
return False, self.context['info']
return self.context, 'app/transactions/table_view.html'
Ваш get_dynamic_form
, по сути, является тем, что Django делает с modelform_factory(…)
[Django-doc]. Действительно, мы можем работать с:
from django.forms.models import modelform_factory
def get_dynamic_form(request, model, instance=None):
return modelform_factory(model, fields='__all__')(
request.POST or None, instance=instance
)