Reputation: 67
I want to set the value for this CustomerReg in picture above to request.user.username I am able to manually select it, what I want is after login it gets directly assigned to person who has logged in to submit this form.
views.py(multi_form view and register view)
I cannot automatically assign CustomerReg field in Customer model.
def registerPage(request):
if request.user.is_authenticated:
return redirect('form')
else:
form=CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if(form.is_valid()):
form.save()
user=form.cleaned_data['username']
messages.success(request, 'Account created for '+ user)
return redirect('login')
def multi_form(request):
form=RegForm()
if request.method=='POST':
form=RegForm(request.POST, request.FILES)
if form.is_valid():
form.save()
print(request.user.id)
messages.success(request, "Your Response has been recorded")
context={'form':form}
return render(request, 'customer/index.html', context)
models.py(Customer and CustomerReg model) Customer model has customerReg field as foreign key.
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)
def create_profile(sender, **kwargs):
if kwargs['created']:
user_profile=CustomerReg.objects.create(user=kwargs['instance'])
post_save.connect(create_profile, sender=User)
class Customer(models.Model):
id=models.AutoField(primary_key=True, default=None)
customerReg=models.ForeignKey(User, 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)
forms.py
class RegForm(ModelForm):
class Meta:
model=Customer
fields=['first_name', 'last_name']
widgets={
'first_name':forms.TextInput(attrs={'class': 'form-control', 'placeholder':"First Name", 'style': 'border-color:hsl(0, 0%, 0%); border-radius: 10px; border-width: 1px;'}),
'last_name':forms.TextInput(attrs={'class': 'form-control', 'placeholder':"Last Name", 'style': 'border-color:hsl(0, 0%, 0%); border-radius: 10px; border-width: 1px;'}),
}
Upvotes: 0
Views: 438
Reputation: 66
In your form Meta class, add 'customerReg' to exclude list. Then in your registerPage view,
def registerPage(request):
if request.user.is_authenticated:
return redirect('form')
else:
form=CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if(form.is_valid()):
reg = form.save(commit=False)
reg.customerReg = request.user
reg.save()
messages.success(request, 'Account created for '+ user)
return redirect('login')
Upvotes: 1