从数据库中获取字段数据,以填充已提交表单的用户的表单字段



我构建了一个模型表单,希望用户首先登录,然后填写我的表单字段。对于以前没有提交的新用户,我希望表单为空。对于在之前提交过表单的客户,我想获取该登录客户的id,提出get请求,并从数据库中检索字段值以填充表单,以及他之前为提交表单而输入的数据。

目前,我正在尝试这种方法来获取登录用户的id,以填充views.py 中的字段

cur_customer = Customer.objects.get(id=request.user.id)

但是,这会给我一个错误,即客户匹配查询不存在

那么我该如何实现呢?

views.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)

当然,这是假设您的当前客户和当前登录的用户始终是同一个人。

最新更新