CustomUser() получил неожиданный аргумент ключевого слова 'profile_pic'
Я получаю ошибку при отправке формы в моем webapp. Я не уверен, где возникает проблема в Custom user? Я добавил поле profile_pic в свои модели, формы и использую его в функции представления. Но когда я пытаюсь отправить данные с помощью формы, возникает проблема. Вот мои коды
Forms.py
class CustomUserForm(FormSettings):
email = forms.EmailField(required=True)
gender = forms.ChoiceField(choices=[('M', 'Male'), ('F', 'Female')])
first_name = forms.CharField(required=True)
username=forms.CharField(label="Username",max_length=50,widget=forms.TextInput(attrs={"class":"form-control","autocomplete":"off"}))
last_name = forms.CharField(required=True)
address = forms.CharField(widget=forms.Textarea)
password = forms.CharField(widget=forms.PasswordInput)
profile_pic = forms.ImageField()
widget = {
'password': forms.PasswordInput(),
}
def __init__(self, *args, **kwargs):
super(CustomUserForm, self).__init__(*args, **kwargs)
if kwargs.get('instance'):
instance = kwargs.get('instance').admin.__dict__
self.fields['password'].required = False
for field in CustomUserForm.Meta.fields:
self.fields[field].initial = instance.get(field)
if self.instance.pk is not None:
self.fields['password'].widget.attrs['placeholder'] = "Fill this only if you wish to update password"
def clean_email(self, *args, **kwargs):
formEmail = self.cleaned_data['email'].lower()
if self.instance.pk is None: # Insert
if CustomUser.objects.filter(email=formEmail).exists():
raise forms.ValidationError(
"The given email is already registered")
else: # Update
dbEmail = self.Meta.model.objects.get(
id=self.instance.pk).admin.email.lower()
if dbEmail != formEmail: # There has been changes
if CustomUser.objects.filter(email=formEmail).exists():
raise forms.ValidationError("The given email is already registered")
return formEmail
class Meta:
model = CustomUser
fields = ['username','first_name','last_name','email', 'gender', 'password','address','profile_pic']
class AddStudentForm(CustomUserForm):
def __init__(self, *args, **kwargs):
super(AddStudentForm, self).__init__(*args, **kwargs)
class Meta(CustomUserForm.Meta):
model = Students
fields = CustomUserForm.Meta.fields + \
['course_id', 'session_start_year','session_end_year']
Views.py
def add_student(request):
student_form =AddStudentForm(request.POST or None, request.FILES or None)
context = {'form': student_form, 'page_title': 'Add Student'}
if request.method == 'POST':
if student_form.is_valid():
first_name = student_form.cleaned_data.get('first_name')
last_name = student_form.cleaned_data.get('last_name')
username = student_form.cleaned_data.get('username')
address = student_form.cleaned_data.get('address')
email = student_form.cleaned_data.get('email')
gender = student_form.cleaned_data.get('gender')
password = student_form.cleaned_data.get('password')
course = student_form.cleaned_data.get('course')
session = student_form.cleaned_data.get('session')
profile_pic = request.FILES['profile_pic']
fs = FileSystemStorage()
filename = fs.save(profile_pic.name, profile_pic)
passport_url = fs.url(filename)
try:
user = CustomUser.objects.create_user( username = username,
email=email, password=password, user_type=3, first_name=first_name, last_name=last_name, profile_pic=passport_url)
user.gender = gender
user.address = address
user.student.course = course
user.save()
messages.success(request, "Successfully Added")
return redirect(reverse('add_student'))
except Exception as e:
messages.error(request, "Could Not Add: " + str(e))
else:
messages.error(request, "Could Not Add: ")
return render(request, 'manage_student.html', context)
Models.py
class CustomUser(AbstractUser):
user_type_data=((1,"HOD"),(2,"Staff"),(3,"Student"))
user_type=models.CharField(default=1,choices=user_type_data,max_length=10)
class Students(models.Model):
id=models.AutoField(primary_key=True)
admin=models.OneToOneField(CustomUser,on_delete=models.CASCADE)
gender=models.CharField(max_length=255)
profile_pic = models.ImageField()
address=models.TextField()
course_id=models.ForeignKey(Courses,on_delete=models.DO_NOTHING)
session_start_year=models.DateField()
session_end_year=models.DateField()
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now_add=True)
fcm_token=models.TextField(default="")
objects = models.Manager()