我有一个用于在某些领域进行注册的模型。所有字段都是我通过这种形式填写的模型。
def get_name(request):
if request.method == 'POST':
user_code = generate_code(8)
subject = 'code'
message = user_code
phone=request.POST['phone']
form = NameForm(request.POST)
if form.is_valid():
date_use = form.cleaned_data.get("date_visit")
time_use = form.cleaned_data.get("time_visit")
purpose_use = form.cleaned_data.get("purpose")
if Registration.objects.filter(date_visit=date_use,time_visit=time_use,purpose=purpose_use).count()==0:
Registration.objects.create(fio=request.POST['fio'],phone=request.POST['phone'],date_visit=request.POST['date_visit'],time_visit=request.POST['time_visit'],
number_car=request.POST['number_car'],purpose=request.POST['purpose'],
tso=request.POST['tso'])
request.session["phone"] = phone
request.session["code"] = user_code
return HttpResponseRedirect('endreg')
else:
form = NameForm()
return render(request, 'registers/detail.html', {'form': form})
模型也有一个字段
date_register = models.DateTimeField(verbose_name = 'date register', auto_now_add=True)
我如何在request.session [“ date”]中写入date_register值?
默认情况下,django使用JSONSerializer
,并且它不能转储日期时间对象。
最简单的解决方案是将PickleSerializer
用作SESSION_SERIALIZER
,但可能会导致性能问题(docs:https://docs.djangoproject.com/en/3.0/ref/settings/#std:setting-SESSION_SERIALIZER)
[另一种方法-根据Django序列化器编写自定义json序列化器,但具有转储datetime对象的默认功能,或在保存到会话之前将日期简单转换为字符串格式或时间戳。
代替Registration.objects.create(...)
,您可以使用.save
方法:
obj = Registration()
obj.fio = form.cleaned_data["fio"]
...
obj.save()
request.session["date"] = obj.date_register