django - 如何从 Django 中的 views.py 填写表单字段?
问题描述
我正在使用一个函数来记录页面加载和用户提交数据之间的时间。在该表单中,我创建了一个隐藏字段,以便管理员可以看到它。但是,我无法实现我的想法,因为我不明白如何从views.py 将时间提交给表单。如果有人可以建议一种更简单、更简单的替代方法来实现我想要做的事情,那对我也很有帮助。我的代码如下。
模型.py
class Responses(models.Model):
question1 = models.TextField()
question2 = models.TextField()
question3 = models.TextField()
timespent1 = models.TextField()
表格.py
class Question1Form(forms.ModelForm):
question1 = forms.CharField()
timespent1 = forms.TimeField(widget=forms.HiddenInput())
class Meta:
model = Responses
fields = ('question1','timespent1')
视图.py
def qone(request):
if request.method =="GET":
starttime = my_timer()
elif request.method == "POST":
form = Question1Form(request.POST)
if form.is_valid():
endtime = my_timer()
timespentstr = '{0} seconds'.format(endtime-starttime)
#Do something to set timespent1 field = timespentstr here
form = form.save()
else:
form = Question1Form
return render(request,'question1.html',{'form':form})
解决方案
您需要将开始时间存储在“其他地方”——也许将其存储在 GET 的会话中,然后在 POST 中将其从那里拉回来:
def qone(request):
if request.method == 'GET':
request.session['start_time'] = mytimer()
form = Question1Form()
elif request.method == 'POST':
form = Question1Form(request.POST, request.FILES)
if form.is_valid():
end_time = mytimer()
start_time = request.session.get('start_time')
time_spent = end_time - start_time
....
form.save()
return render(request, 'question1.html', {'form': form})
您还可以查看将开始时间直接传递给表单,然后将所有逻辑都放入其中,但这可能会使事情复杂化。也许将“花费的时间”传递给表单构造函数可能是最好的方法。
class Question1Form(forms.Form):
def __init__(self, *args, **kwargs):
self.time_taken = self.kwargs.pop('time_taken', None)
super().__init__(*args, **kwargs)
def qone(request):
if request.method == 'GET':
form = Question1Form()
request.session['start_time'] = my_timer()
elif request.method == 'POST':
form = Question1Form(
request.POST, request.FILES,
time_taken=my_timer() - request.session.pop('start_time')
)
if form.is_valid():
form.save()
# ...
推荐阅读
- android - 本地通知不起作用如何解决
- c# - 从运行时的代码向场景大纲中的示例表添加行
- c# - 一次使用 IEnumerable 多次
- linux - 无法使用 JSch 从 Java 程序在远程服务器中执行 Linux shell 脚本
- python - 返回最长单词的长度 - Python
- react-native - 如何迁移 reactnavigation 导航功能?
- reactjs - 使用 this.props.data 时的空数组
- java - JLabel seticon 错误,线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException
- asp.net-core - .net core 3.0 自动迁移不会自动创建/更新/数据表
- python - 如何从内存中清除 matplotlib 图