查看view
代码,在我看来,每次执行 GET 时都应该初始化表单类。
#views.py
if request.method == 'GET':
form = PrenotaForm()
return render(request, "prenota.html", {'form': form, 'posti_liberi': posti_disponibili, 'giovani_iscritti': giovani_iscritti})
else:
# it's a POST
我想弄清楚的是为什么我的form
类代码在每次刷新时都不会执行:
# forms.py
class PrenotaForm(forms.ModelForm):
size_gruppi = 30
print("gruppi size is : " + str(size_gruppi))
在我的控制台中,我看到每次修改和保存forms.py文件时都会执行代码,或者每当我使用以下命令启动服务器时python manage.py runserver
:
正在执行系统检查...
gruppi 大小为:30
但是感兴趣的页面的简单刷新不会执行控制台中显示的代码:
Django 2.1 版,使用设置 'test_project.settings' 从http://127.0.0.1:8000/启动开发服务器 使用 CONTROL-C 退出服务器。[24/May/2019 15:35:38] "GET /it/iscrizione/prenota/ HTTP/1.1" 200 11898 [24/May/2019 15:35:38] "GET /static/images/favicon.ico HTTP /1.1" 200 549 [24/May/2019 15:35:39] "GET /it/iscrizione/prenota/ HTTP/1.1" 200 11898 [24/May/2019 15:35:39] "GET /static/images /favicon.ico HTTP/1.1" 200 549 [24/May/2019 15:35:39] "GET /it/iscrizione/prenota/ HTTP/1.1" 200 11898 [24/May/2019 15:35:39]" GET /static/images/favicon.ico HTTP/1.1" 200 549
它给我带来了问题,因为表单并不总是更新(例如:动态选择 DDL)触发验证错误。
我的方法/代码有问题,还是 django MTV/MVC 模式的正常行为?
我该怎么做才能在每次页面刷新时更新表单?
在python中,类属性(也称为“类成员”)在读取文件时与类相关联。所以size_gruppi
在第一次导入文件时设置。当您实例化一个类 ( PrenotaForm()
) 时,__init__()
会调用该类的方法。除非您覆盖它,否则实例将具有与类相同的属性。
因此,如果您想在实例化类时更改某些属性,请添加初始化程序:
class PrenotaForm(ModelForm):
size_gruppi = 30
def __init__(self, *args, **kwargs):
self.size_gruppi = kwargs.pop('size_gruppi', self.size_gruppi)
super().__init__(*args, **kwargs)
# in your view
form = PrenotaForm(size_gruppi=50) # form.size_gruppi = 50
form = PrenotaForm() # form.size_gruppi = 30
所以在这里我可以通过将其传递给初始化程序来覆盖该属性。如果我不通过它,则保留默认值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句