django - 从数据库中获取字段数据以填充已提交表单的用户的表单字段
问题描述
我建立了一个模型表单,我希望用户首先登录然后填写我的表单字段。对于以前没有提交过的新用户,我希望表单为空白。对于之前提交过表单的客户,我想获取发出 GET 请求的登录客户的 ID,并从数据库中检索字段值以填充表单,并使用他之前输入的数据来提交表单。
目前我正在尝试这种方法来获取登录用户的 ID 以填充 views.py 中的字段
cur_customer = Customer.objects.get(id=request.user.id)
然而,这给了我一个错误,说客户匹配查询不存在。
那么我将如何实现呢?
视图.py
def multi_form(request):
form=RegForm()
if request.method=='POST':
form=RegForm(request.POST, request.FILES)
if form.is_valid():
form.save()
messages.success(request, "Your Response has been recorded")
context={'form':form}
return render(request, 'customer/index.html', context)
else :
return render(request, 'customer/index.html', {'form': form})
else:
cur_customer = Customer.objects.get(id=request.user.id)
form=RegForm(initial={
'first_name':cur_customer.get('first_name',''),
'last_name':cur_customer.get('last_name','')})
context = {'form': form}
return render(request, 'customer/index.html', context)
模型.py
class Customer(models.Model):
id=models.AutoField(primary_key=True, default=None)
customerReg=models.OneToOneField(CustomerReg, on_delete=models.SET_NULL, null=True, blank=True)
first_name=models.CharField(max_length=200, blank=False, default=None)
last_name=models.CharField(max_length=200, blank=False, default=None)
class CustomerReg(models.Model):
user=models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
name=models.CharField(max_length=200, null=True)
email=models.EmailField(max_length=254)
解决方案
您可以request.user.is_authenticated
在您的视图中使用来检查是否有登录的用户。您当前正在尝试在没有人登录的情况下检索用户,因此您应该将该检查放入您的视图中:
def multi_form(request):
if request.method=='POST':
form=RegForm(request.POST, request.FILES)
if form.is_valid():
form.save()
messages.success(request, "Your Response has been recorded")
context={'form':form}
return render(request, 'customer/index.html', context)
else :
return render(request, 'customer/index.html', {'form': form})
else:
if request.user.is_authenticated:
form = RegForm(initial={
'first_name':request.user.first_name,
'last_name':request.user.last_name})
else:
form = RegForm()
context = {'form': form}
return render(request, 'customer/index.html', context)
这当然假设您当前的客户和当前登录的用户始终是同一个人。
推荐阅读
- python - 从 Python 中的另一个字符串中删除第一次出现的字符串
- reactjs - 无法使用来自 react chrome 扩展的按钮单击访问 chrome://apps 或 chrome://extension
- java - Mockito - doCallRealMethod 在springboot应用程序中没有按预期工作
- c# - 无法隐式转换类型'system.collections.generic.list
至 - python - 使用python时将用户输入放在sql函数中
- json - 将 JsonPath 与 Jackson 的 JsonProperty 结合用于嵌套节点?
- pyspark - Pyspark 数据框:访问列(TypeError:列不可迭代)
- excel - 使用选项显式在未设置对象上跳过错误“未定义变量”
- rest - 可以返回数据对象和自定义错误消息吗?
- javascript - 使 jexcel javascript 电子表格响应屏幕