gpt4 book ai didi

python - 动态更新 ModelForm 的 Meta 类

转载 作者:IT老高 更新时间:2023-10-28 20:23:31 25 4
gpt4 key购买 nike

我希望从我的 View 中动态更新 ModelForm 的内联 Meta 类。虽然这段代码似乎更新了 Meta 类中的排除列表,但 as_p()as_ul() 等的输出并没有反射(reflect)更新后的 Meta 排除。

我假设 html 是在创建 ModelForm 时生成的,而不是在调用 as_*() 时生成的。有没有办法强制更新 HTML?

这甚至是最好的方法吗?我只是假设这应该工作。

想法?

from django.forms import ModelForm

from testprogram.online_bookings.models import Passenger

class PassengerInfoForm(ModelForm):

def set_form_excludes(self, exclude_list):
self.Meta.exclude = excludes_list

class Meta:
model = Passenger
exclude = []

最佳答案

Meta 类用于动态构造表单定义 - 因此,当您创建 ModelForm 实例时,不在 exclude 中的字段已添加为新对象的属性。

通常的方法是为每个可能的排除列表设置多个类定义。但是,如果您希望表单本身是动态的,则必须动态创建类定义。比如:

def get_form(exclude_list):
class MyForm(ModelForm):
class Meta:
model = Passenger
exclude = exclude_list
return MyForm

form_class = get_form(('field1', 'field2'))
form = form_class()

更新:我刚刚重温了这篇文章,并认为我会发布一些更惯用的方法来处理动态类:

def PassengerForm(exclude_list, *args, **kwargs):
class MyPassengerForm(ModelForm):
class Meta:
model = Passenger
exclude = exclude_list

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

return MyPassengerForm()

form = PassengerForm(('field1', 'field2'))

关于python - 动态更新 ModelForm 的 Meta 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/297383/

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