我正在尝试在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中的相应“键”值中选择选项。
我试图使信息清晰易懂,请让我知道是否错过了理解问题所需的任何信息。解决这个问题的任何想法都会有很大帮助!