我有一个用于注册某些字段的模型。 所有字段都是我通过这种形式填写的模型。
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值?
答案 0 :(得分:0)
默认django使用JSONSerializer
,并且它不能转储日期时间对象。
最简单的解决方案是将PickleSerializer
用作SESSION_SERIALIZER
,但这会导致性能问题(文档:https://docs.djangoproject.com/en/3.0/ref/settings/#std:setting-SESSION_SERIALIZER)
另一种实现方法-根据Django序列化器编写自定义json序列化器,但具有转储datetime对象的默认功能,或者在保存到会话之前将日期简单转换为字符串格式或时间戳。
答案 1 :(得分:0)
可以使用Registration.objects.create(...)
方法来代替.save
:
obj = Registration()
obj.fio = form.cleaned_data["fio"]
...
obj.save()
request.session["date"] = str(obj.date_register)