Dynami c поля в формах django - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь создать настраиваемую форму в 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.

Я попытался сделать информацию ясной и понятной, пожалуйста, дайте мне знать, есть ли у меня пропустил любую информацию, которая могла бы понадобиться для понимания проблемы. Любые идеи по решению этой проблемы будут большим подспорьем!

...