#django #django-models #django-forms #django-views
#django #django-модели #django-forms #django-просмотры
Вопрос:
Я создал типовую форму, в которой я хочу, чтобы пользователь сначала вошел в систему, а затем заполнил поля моей формы. Для нового пользователя без предыдущей отправки я хочу, чтобы форма была пустой. Для клиента, который отправил форму ранее, я хочу получить идентификатор этого вошедшего в систему клиента, делающего запрос GET, и получить значения полей из базы данных для заполнения формы данными, которые он ранее ввел для отправки формы.
На данный момент я пытаюсь использовать этот подход, чтобы получить идентификатор зарегистрированного пользователя для заполнения полей в 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)
Ответ №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)
Это, конечно, предполагает, что ваш текущий клиент и пользователь, который в данный момент вошел в систему, всегда являются одним и тем же человеком.
Комментарии:
1. Ошибка атрибута в объекте /form / ‘User’ не имеет атрибута ‘get’, Это то, что я получаю сейчас.
2. @Shaurya попробуйте использовать
request.user.first_name
иrequest.user.last_name
3. никаких эффектов при перезагрузке страницы. Поля пусты.
4.
if request.user.is_authenticated: form = RegForm(initial={ 'first_name':request.user.first_name, 'last_name':request.user.last_name})
Это мой измененный код @voodoo-burger5. @Shaurya вы уверены, что имена ваших полей формы —
first_name
иlast_name
?