0
我有一些型號:如何在Django ModelAdmin中創建和保存動態字段?
class GroupType(models.Model):
name = models.CharField(max_length=255)
class Group(models.Model):
name = models.CharField(max_length=255)
group_type = models.ForeignKey(GroupType)
class Person(models.Model):
name = models.CharField(max_length=255)
groups = models.ManyToManyField(Group, related_name="+")
但在的ModelAdmin我想動態添加字段每個組的類型。所以,如果我有兩個組類型public
,private
,我希望管理員表單顯示兩個字段public_groups
和private_groups
而不是實際的數據庫字段groups
。
更多信息
我試圖創建一個自定義窗體動態添加字段:
class PersonAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PersonAdminForm, self).__init__(*args, **kwargs)
new_fields = {}
for group_type in GroupType.objects.all():
field_name = "{0}_groups".format(group_type.name.lower())
qs = Group.objects.filter(group_type=group_type)
field_field = forms.ModelMultipleChoiceField(queryset=qs)
new_fields[field_name] = field_field
self.fields.update(new_fields)
class Meta:
model = Person
fields = '__all__'
這似乎就這樣的伎倆如添加字段的形式。但保存這些字段並將它們添加到PersonAdmin
不起作用。如果我明確地將字段添加到fields
屬性上PersonAdmin
我得到:
def get_fieldsets(self, request, obj=None):
fieldsets = super(PersonAdmin, self).get_fieldsets(request, obj)
print(self.form.fields)
fieldsets[0][1]['fields'].extend(['public_groups', 'private_groups'])
return fieldsets