I am trying to create a form that will allow users to enter their address, country and other details. However I can’t seem to update said form
This is what i have written in models.py:
class User(AbstractUser):
is_student = models.BooleanField(default=False)
is_teacher = models.BooleanField(default=False)
...
class Mentor(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True, related_name='mentor')
linkedin = models.URLField(max_length=200,null=True,blank=True)
COUNTRIES = (
('SA', 'South Africa'),
('NG', 'Nigeria'),
('KE', 'Kenya'),
('OT', 'Other')
)
address = models.CharField(max_length=500, null=True, blank=True)
country = models.CharField(max_length=30, choices=COUNTRIES)
invoice_name = models.CharField(max_length=200, null=False, blank=False)
account_num = models.IntegerField(max_length=100, null=False, blank=False)
bank_name = models.CharField(max_length=50, null=False)
branch_code = models.IntegerField(max_length=25, blank=False)
forms.py
class TeacherSignUpForm(UserCreationForm):
email = forms.EmailField(max_length=100)
first_name = forms.CharField(max_length=100)
last_name = forms.CharField(max_length=100)
linkedin = forms.URLField(max_length=200)
class Meta(UserCreationForm.Meta):
model = User
fields = ('email', 'username', 'first_name', 'last_name')
def save(self, commit=True):
self.instance.is_teacher = True
user = super(UserCreationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
mentor = Mentor.objects.get_or_create(
user=user,
linkedin=self.cleaned_data['linkedin'])
return user
...
class MentorPaymentForm(forms.ModelForm):
class Meta:
model = Mentor
fields = ('address', 'country', 'invoice_name', 'account_num', 'bank_name', 'branch_code')
views.py:
def payment_view(request):
user = request.user
paymentform = MentorPaymentForm(request.POST, request.FILES, instance= user.mentor)
if request.method == 'POST':
if paymentform.is_valid():
paymentform.save()
return HttpResponseRedirect('%s' % (reverse('teachers:billing')))
else:
paymentform = MentorPaymentForm(instance= user.mentor)
return render(request, 'classroom/teachers/app-student-dashboard.html', {'paymentform': paymentform})
and the html form:
<div class="form-group">
<label for="name" class="col-md-2 control-label">Name on Invoice</label>
<div class="col-md-6">
<div class="form-control-material">
<input type="text" class="form-control used" id="name" value="{{ paymentform.invoice_name }}">
{{ paymentform.invoice_name }}
<label for="invoice_name"></label>
</div>
</div>
</div>
<div class="form-group">
<label for="address" class="col-md-2 control-label">Address</label>
<div class="col-md-6">
<div class="form-control-material">
<textarea class="form-control used" id="address"> </textarea>
{{ paymentform.address }}
<label for="address">Address</label>
</div>
</div>
...
<div class="form-group">
<label for="country" class="col-md-2 control-label">Country</label>
<div class="col-md-6">
{{ paymentform.country }}
<select id="country" data-toggle="select2" class="width-100">
<option value="1" selected>South Africa</option>
<option value="2">Nigeria</option>
<option value="3">Kenya</option>
<option value="4">Other</option>
</select>
</div>