I am facing problem in triggering the system to send password reset email to the users. I will upload a csv file(this has details like FN,LN, email address) which contains customer details and once the upload is successful, the system has to send an password reset email to the customers.
Now i see the following error when i try to upload the csv 'UploadFileForm' object has no attribute 'save'
1) On importing/uploading the CSV file the users must be created and the users gets a password reset email to change the password ---- This is done by the system.
NOTE - I am using Django 2.0.8, I also tried this link Trigger Password rest.
view.py
def validate_csv(value):
if not value.name.endswith('.csv'):
raise ValidationError('Invalid file type')
def handle_uploaded_file(request):
csvf = StringIO(request.FILES['file'].read().decode())
reader = csv.reader(csvf, delimiter=',')
reader.__next__();
count = 0
for row in reader:
vu = ValidUser(email = row[1],first_name = row[2],last_name = row[3])
if vu is not None:
vu.save()
count = count + 1
return count
@login_required
def registerusers(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
file_name = request.FILES['file']
validate_csv(file_name)
user = form.save(commit=False)
user.is_active = False
user.save()
current_site = get_current_site(request)
subject = 'Enter Password for your Account'
message = render_to_string('account_activation_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': default_token_generator.make_token(user),
})
user.email_user(subject, message)
# return redirect('account_activation_sent')
# return redirect('dashboard')
value = handle_uploaded_file(request)
if value > 0:
messages.success(request, str(value)+' users added successfully')
else:
form = UploadFileForm()
return render(request, 'account/registerusers.html')
forms.py
from django import forms
from django.contrib.auth.models import User
class UploadFileForm(forms.Form):
file = forms.FileField(label=" Choose the CSV file")
class Meta:
model = User
models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
class ValidUser(models.Model):
#user = models.OneToOneField(User, on_delete=models.CASCADE)
email = models.EmailField(blank=True, null=None)
first_name = models.CharField(max_length=50, default=None)
last_name = models.CharField(max_length=50, default=None)
is_active = models.BooleanField(_('active'), default =False)
error
[21/Sep/2018 15:36:30] "GET /users/ HTTP/1.1" 200 4139
[21/Sep/2018 15:36:31] "GET /registerusers/ HTTP/1.1" 200 4158
Internal Server Error: /registerusers/
Traceback (most recent call last):
File "C:\Users\nik\Anaconda3\lib\site-packages\django\core\handlers\exception.py", line 35, in inner
response = get_response(request)
File "C:\Users\nik\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\nik\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\nik\Anaconda3\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Users\nik\Desktop\Version - 7\project\account\views.py", line 91, in registerusers
user = form.save(commit=False)
AttributeError: 'UploadFileForm' object has no attribute 'save'