gpt4 book ai didi

python - Django 1.7,动态管理表单

转载 作者:行者123 更新时间:2023-11-28 16:35:33 25 4
gpt4 key购买 nike

我正在尝试在 Django 管理中创建完全动态的表单。在 goole 中找到解决方案,如 thisthis .但是这个解决方案对我不起作用。例如这段代码:

class DeviceAdmin(admin.ModelAdmin):
form = MyDeviceAdminForm
def get_fieldsets(self, request, obj=None):
fieldsets = super(DeviceAdmin, self).get_fieldsets(request, obj)
fieldsets[0][1]['fields'] += ('foo',)
return fieldsets

class MyDeviceAdminForm(forms.ModelForm):
class Meta:
model = Device
def __init__(self, *args, **kwargs):
super(MyDeviceAdminForm, self).__init__(*args, **kwargs)
self.fields['foo'] = forms.IntegerField(label="foo")

收到此错误:“为设备指定的未知字段(项目类型)。检查字段/字段集/排除类 DeviceAdmin 的属性。”

而且我找不到解决方案。我知道我需要在其他地方定义 foo 字段,但不知道在哪里。

最佳答案

Django > 1.4 引入了导致此损坏的更改。基本上 get_fieldsets 是在表单工厂之前调用的,然后工厂会提示你在 get_fieldsets 中引入的额外字段。幸运的是 get_fieldsets 被调用了不止一次,提供了颠覆流程的机会。我的解决方案是在请求通过表单机制时,在请求中添加一个标记属性:

def get_fieldsets(self, request, obj=None):
fieldsets = super(DeviceAdmin, self).get_fieldsets(request, obj)
if hasattr(request, "_gfs_marker"):
fieldsets[0][1]['fields'] += ('foo',)
setattr(request, "_gfs_marker", 1)
return fieldsets

关于python - Django 1.7,动态管理表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26862810/

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