Я пытаюсь создать настраиваемую форму в django admin для моей ModelB с полями, взятыми из другой ModelA.
models.py
class ModelA(models.Model):
source = models.CharField(max_length=80)
keys = ArrayField(
models.CharField(max_length=50)
)
class ModelB(models.Model):
characteristic_keys = JSONField()
forms.py
class ModelBForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
queryset = ModelA.objects.all()
dynamic_fields = [(x.source, x.keys) for x in queryset]
# New fields to be shown on admin =>
# Field name => "source" from modelA
# Field type => multiple choice with options => "keys" from modelA
for field in dynamic_fields:
self.fields[field[0]] = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
choices=field[1])
def save(self, commit=True):
# ...do something with extra_field here...
return super().save(commit=commit)
class Meta:
model = Workflow
fields = "__all__"
admin.py
class ModelBAdmin(admin.ModelAdmin):
form = ModelBForm
admin.site.register(ModelB, ModelBAdmin)
Мне нужна одна форма для ModelB на django admin, с динамическим c "исходные" поля взяты из ModelA, с несколькими вариантами выбора из соответствующих им "ключевых" значений в модели B.
Я попытался сделать информацию ясной и понятной, пожалуйста, дайте мне знать, есть ли у меня пропустил любую информацию, которая могла бы понадобиться для понимания проблемы. Любые идеи по решению этой проблемы будут большим подспорьем!