I have an user add form view that asks for information and saves a new user to the db. When I try saving a new user record, I get the following error.
TypeError at /user/add/
__init__() missing 1 required positional argument: 'customer'
Request Method: GET
Request URL: http://localhost:8000/user/add/
Django Version: 3.0.5
Exception Type: TypeError
Exception Value:
__init__() missing 1 required positional argument: 'customer'
Exception Location: D:\Job Documents\DDS\AuthenticationProject\env\lib\site-packages\django\views\generic\edit.py in get_form, line 33
Python Executable: D:\Job Documents\DDS\AuthenticationProject\env\Scripts\python.exe
Python Version: 3.9.0
Python Path:
['D:\\Job Documents\\DDS\\AuthenticationProject\\auth',
'C:\\Users\\bratca\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
'C:\\Users\\bratca\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
'C:\\Users\\bratca\\AppData\\Local\\Programs\\Python\\Python39\\lib',
'C:\\Users\\bratca\\AppData\\Local\\Programs\\Python\\Python39',
'D:\\Job Documents\\DDS\\AuthenticationProject\\env',
'D:\\Job Documents\\DDS\\AuthenticationProject\\env\\lib\\site-packages']
Server time: Sun, 15 Aug 2021 08:05:30 +0000
I am using customer object to differentiate users, therefore I want the form to know by whom it's being filled such that a new created user will have the same customer object as the creator.
This error does not show exactly where is my bug in the code. Instead it shows some error in the actual django code, generic things that I am using.
class AddUserFormView(FormView):
form_class = TbUserAddForm
template_name = 'users/add_user_modal.html'
success_message = "Account has been created! The user is able to log in."
def post(self, request):
form = self.form_class(customer=request.user.customer,
data=request.POST, files=request.FILES)
if form.is_valid():
user_face_img_md5 = Image.open(
request.FILES['user_face_img_md5'].file)
user_head_img_md5 = Image.open(
request.FILES['user_head_img_md5'].file)
obj = form.save(commit=False)
response = addUserApi(obj.__dict__,
user_face_img_md5,
user_head_img_md5)
print(f"Request Response [Add User] --> {response.text}")
# if response.text['status'] != 45001:
# messages.error(f'Something went wrong. {response.text}')
return redirect('add-user')
else:
messages.error(request, form.errors)
return redirect('add-user')
class TbUserAddForm(CustomUserCreationForm):
email = forms.EmailField()
user_head_img_md5 = forms.ImageField(label='Avatar', required=True)
user_face_img_md5 = forms.ImageField(
label='Face Recognition Image', required=True)
def __init__(self, customer, *args, **kwargs):
super().__init__(*args, **kwargs)
print(f'USER ADD FORM CUSTOMER -> {customer}')
self.customer = customer
if self.customer:
self.fields['role'].queryset = TbRole.objects.all().filter(
customer=self.customer)
self.fields['department'].queryset = TbDepartment.objects.all().filter(
customer=self.customer)
class Meta:
model = TbUser
fields = [...]
path('add/', views.AddUserFormView.as_view(), name='add-user'),
The user is not saved by django but the addUserApi() sends a request to another server. Therefore sometimes user is being created because addUserApi has worked. But with the same error thrown.