动态更新ModelForm的Meta类
我希望从我的角度动态更新 ModelForm 的内联 Meta 类。 尽管此代码似乎更新了 Meta 类中的排除列表,但 as_p()
、as_ul()
等的输出并不反映更新后的 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 = []
I am hoping to dynamically update a ModelForm's inline Meta class from my view. Although this code seems to update the exclude list in the Meta class, the output from as_p()
, as_ul()
, etc does not reflect the updated Meta exclude.
I assume then that the html is generated when the ModelForm is created not when the as_*()
is called. Is there a way to force the update of the HTML?
Is this even the best way to do it? I just assumed this should work.
Thoughts?
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 = []
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Meta 类用于动态构造表单定义 - 因此,当您创建 ModelForm 实例时,不在排除中的字段已被添加为新对象的属性。
通常的方法是为每个可能的排除列表提供多个类定义。 但如果您希望表单本身是动态的,则必须动态创建一个类定义。 像这样的东西:
更新:我刚刚重新审视了这篇文章,并认为我应该发布一种更惯用的方法来处理动态类:
The Meta class is used to dynamically construct the form definition - so by the time you've created the ModelForm instance, the fields not in the exclude have already been added as the new object's attributes.
The normal way to do it would be to just have multiple class definitions for each possible exclude list. But if you want the form itself to be dynamic, you'll have to create a class definition on the fly. Something like:
UPDATE: I just revisited this post and thought I'd post a little more idiomatic way to handle a dynamic class:
其他方式:
Another way:
类似的方法,略有不同的目标(任意模型的通用 ModelForm):
Similar approach, somewhat different goal (generic ModelForm for arbitrary models):
使用
modelform_factory
(文档):Use
modelform_factory
(doc):