Django表单中的动态字段

时间:2020-05-08 20:50:30

标签: python django django-rest-framework django-forms django-admin

我正在尝试在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)

我想在django admin上使用ModelB的单一表单,其中动态的“源”字段取自ModelA,并从modelB中的相应“键”值中选择选项。

我试图使信息清晰易懂,请让我知道是否错过了理解问题所需的任何信息。解决这个问题的任何想法都会有很大帮助!

0 个答案:

没有答案