Home > Net >  'User' object has no attribute 'staffUser'
'User' object has no attribute 'staffUser'

Time:02-10

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

CodePudding user response:

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

CodePudding user response:

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)

  • Related