【问题标题】:Get field data from database to populate form fields for a user who has already submitted the form从数据库中获取字段数据以填充已提交表单的用户的表单字段
【发布时间】:2020-12-14 08:48:08
【问题描述】:

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

目前我正在尝试这种方法来获取登录用户的 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)

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

【问题讨论】:

    标签: django django-models django-forms django-views


    【解决方案1】:

    您可以在您的视图中使用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)
    

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

    【讨论】:

    • AttributeError at /form/ 'User' 对象没有属性 'get' 这就是我现在得到的。
    • @Shaurya 尝试使用request.user.first_namerequest.user.last_name
    • 对重新加载页面没有影响。字段为空。
    • if request.user.is_authenticated: form = RegForm(initial={ 'first_name':request.user.first_name, 'last_name':request.user.last_name}) 这是我修改后的代码@voodoo-burger
    • @Shaurya 你确定你的表单域的名字是first_namelast_name
    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多