gpt4 book ai didi

django - Django admin 中 `__init__` 中的动态表单字段

转载 作者:行者123 更新时间:2023-12-02 00:30:59 24 4
gpt4 key购买 nike

我希望能够在运行时向 django 管理表单添加字段。我的模型和形式:

#admin.py
class SitesForm(forms.ModelForm):

def __init__(self, *args, **kwargs):
super(SitesForm, self).__init__(*args, **kwargs)

self.fields['mynewfield'] = forms.CharField()

class SitesAdmin(admin.ModelAdmin):
form = SitesForm

admin.site.register(Sites,SitesAdmin)

#model.py
class Sites(models.Model):
url = models.URLField(u'URL')
is_active = models.BooleanField(default=True, blank=True)
is_new = models.BooleanField(default=False, blank=True)
group = models.ForeignKey('SitesGroup')
config = models.TextField(blank=True)

字段 mynewfield不以表格形式显示。为什么?

最佳答案

您不应该以这种方式向表单添加新字段,您可以像添加任何其他字段一样添加新字段,表单将同时包含模型的原始字段和新字段:

class SitesForm(forms.ModelForm):
mynewfield = forms.CharField(max_length=255, blank=True)

class Meta:
model = Sites

class SitesAdmin(admin.ModelAdmin):
form = SitesForm

admin.site.register(Sites, SitesAdmin)

编辑 : 对不起,应该读你写的好一点。如果你想要一个 动态像这样的字段,那么您需要执行以下操作,它会完全按照您的要求执行操作:
class SitesForm(forms.ModelForm):
class Meta:
model = Sites

def __init__(self, *args, **kwargs):
self.base_fields['mynewfield'] = forms.CharField(max_length=255, blank=True)
super(SitesForm, self).__init__(*args, **kwargs)

class SitesAdmin(admin.ModelAdmin):
form = SitesForm

admin.site.register(Sites, SitesAdmin)

它是由包含表单将使用的字段的元类组成的 base_fields。

关于django - Django admin 中 `__init__` 中的动态表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6788189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com