Reputation: 25
I customized the User Model Using Django One To One Field
My models.py
class StaffUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
department = models.ForeignKey(Dept, on_delete=models.RESTRICT)
def __str__(self):
return self.user.username
When uploading a form, i want to get the department of the user
'My Views.py'
def FileUploadForm(request, pk):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
form.save(commit=False)
u = User.objects.get(username=request.user)
form.instance.username = u
folder = Folder.objects.get(id=pk)
department = u.staffUser.department
form.save()
messages.success(request, f'File Successfully uploaded to {folder} in {department}!')
return redirect('home')
else:
form = UploadFileForm()
context = {'pk':pk, 'form':form}
return render(request, "pages/fileup_form.html", context)
But it gives error AttributeError at /file/new/1 'User' object has no attribute 'staffUser'
Please guys i need help
Upvotes: 0
Views: 524
Reputation: 161
You need to specify the reverse in lower case, so staffuser
instead of staffUser
.
Alternatively you can specify the related name to be used for calling the reverse accessor, as per below in place of some_name
.
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name=some_name)
Upvotes: 1
Reputation: 1708
Add related_name
on your user field in StaffUser
model
class StaffUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name=staff_user)
department = models.ForeignKey(Dept, on_delete=models.RESTRICT)
def __str__(self):
return self.user.username
Now you will be able to access StaffUser by staff_user
on User object
Upvotes: 1