python - User got saved in django regardless of other two forms with it are valid or not -


userform got saved no matter if other 2 forms (studentorfacultyform , useridform) valid or not. user should not created if other 2 forms invalid. please help!

models.py

class studentorfaculty(models.model):     student = 's'     faculty = 'f'     profile_choices = (         (student, 'student'),         (faculty, 'faculty'),     )     # links user model instance     user = models.onetoonefield(user, related_name='fors')      # additional attributes     st_or_faculty = models.charfield(max_length=1, choices=profile_choices)      def __str__(self):         if(self.st_or_faculty == 's'):             fullname = 'student'         elif(self.st_or_faculty == 'f'):             fullname = 'faculty'         else:             fullname = 'unknown'         return str(self.user) + " " + fullname class useractivation(models.model):     user = models.onetoonefield(user)     activation_key = models.charfield(max_length=255, blank=true)     key_expires = models.datetimefield(default=(timezone.now() + timedelta(days=1)))      def __str__(self):         return self.user.username      class meta:         verbose_name_plural=u'activation'  class useridcard(models.model):     user = models.onetoonefield(user)     id_card = models.imagefield(upload_to='id_cards') 

forms.py

fors_choices = (('f','faculty'),('s','student'))  class userform(forms.modelform):     first_name = forms.charfield(help_text="frist name")     last_name = forms.charfield(help_text="last name")     username = forms.charfield(help_text="username")     email = forms.charfield(help_text="email")     password = forms.charfield(widget=forms.passwordinput(),         help_text="password")      class meta:         model = user         fields = ('first_name', 'last_name', 'username', 'email',             'password')      def clean_email(self):         email = self.cleaned_data.get('email')         username = self.cleaned_data.get('username')         if email , user.objects.filter(email=email).exclude(username=username).count():             raise forms.validationerror(u'this email registered.')         return email  class studentorfacultyform(forms.modelform):     """     studentorfaculty option     """      st_or_faculty = forms.choicefield(                         label="student or faculty",                         required=true,                          choices=fors_choices,                         widget=forms.radioselect,                          help_text="student or faculty")      class meta:         model = studentorfaculty         fields = ('st_or_faculty',)  class useridcardform(forms.modelform):     id_card = forms.imagefield(label="college id card")      class meta:         model = useridcard         fields = ('id_card',)      def clean_id_card(self):         image = self.cleaned_data.get('id_card',false)         if image:             if hasattr(image,'_size'):                 if image._size > 4*1024*1024:                     raise validationerror("image file large (should < 4mb )")             return image         else:             raise validationerror("couldn't read uploaded image") 

views.py

def user_signup(request):     # request's context     context = requestcontext(request)      if request.user.is_authenticated():         return httpresponseredirect(reverse('notices:index'))      # boolean value telling template whether signup successfull     # set flase initially. code changes value true when registration     #successfull     registered = false      # if it's http post, we're interested in processing form data     if request.method == 'post':         # attempt grab information         # make use of userforrm , userprofileform         user_form = userform(data=request.post)         student_or_faculty_form = studentorfacultyform(data=request.post)         user_id_card_form = useridcardform(data=request.post, files=request.files)         # if 2 foms valid         if user_form.is_valid() , student_or_faculty_form.is_valid() and\            user_id_card_form.is_valid():             # save user's form data database.             user = user_form.save()              # hash  password set_password method.             # 1 hashed, can update  user object.             user.set_password(user.password)             user.is_active = false             user.save()              uid = user_id_card_form.save(commit=false)             uid.user = user             uid.save()              fors = student_or_faculty_form.save(commit=false)             fors.user = user             fors.save()             username = user_form.cleaned_data['username']             email = user_form.cleaned_data['email']             tmp = random.random()             tmp = str(tmp)             tmp = tmp.encode('utf-8')             salt = hashlib.sha1(tmp).hexdigest()[:5]             salt = salt.encode('utf-8')             email_en = email.encode('utf-8')                         activation_key = hashlib.sha1(salt+email_en).hexdigest()                         key_expires = datetime.datetime.today() + datetime.timedelta(2)             email = user_form.cleaned_data['email']             #get user username             user=user.objects.get(username=username)               new_profile = useractivation(user=user, activation_key=activation_key,                  key_expires=key_expires)             new_profile.save()              # send email activation key             email_subject = 'account confirmation'             email_body = "hey %s, signing up. activate account, click link within \             48hours http://www.socialboard.in/accounts/confirm/%s" % (username, activation_key)              send_mail(email_subject, email_body, 'support@socialboard.in',                 [email], fail_silently=false)               # log in user             user_name = request.post['username']             '''new_user = authenticate(username=request.post['username'],                                     password=request.post['password'])             login(request, new_user)'''               # update variable tell registration successful             registered = true             return httpresponseredirect(reverse('accounts:aftersignup', kwargs={'user_name':user_name}))          # invalid forms          # print problems terminal.         # show  user         else:             print( user_form.errors, student_or_faculty_form.errors, user_id_card_form.errors )      # not http post, render our form using 2 instance     # these forms blank, ready user input.      else:         user_form = userform()         student_or_faculty_form = studentorfacultyform()         user_id_card_form = useridcardform()      # render template depending on context.     return render_to_response(             'accounts/signup.html',             { 'user_form': user_form, 'student_or_faculty_form': student_or_faculty_form,               'user_id_card_form': user_id_card_form,               'registered': registered},               context) 

signup.html

<form class="form-horizontal" role="form" id="user_form" method="post" action="{% url 'accounts:signup' %}"          enctype="multipart/form-data">  {% csrf_token %} {% field in user_form.visible_fields %} <div class="form-group has-feedback">  <div class="col-sm-12"><input type="{{ field.field.widget.input_type }}" class="form-control" name="{{ field.name }}"  placeholder="{{ field.label}}" value="{% if field.value %}{{field.value}}{% endif %}"></div> {% if field.errors %} <div class="col-sm-10 text-danger"> {{ field.errors }} </div> {% endif %} </div> {% endfor %}  {% fieldi in student_or_faculty_form.visible_fields %} <div class="from-group has-feedback"> <!--<label class="col-sm-2 control-label">i </label>--> {% value,text in fieldi.field.choices %} <label class="radio-inline"> <input type="radio" name="{{ fieldi.name }}" id="" value="{{ value }}"><b> {{ text }}</b> </label> {% endfor %} {% if fieldi.errors %} <div class="col-sm-10 text-danger "> {{ fieldi.errors }} </div> {% endif %} </div> {% endfor %} <br>  {% field in user_id_card_form.visible_fields %} <div class="form-group has-feedback"> <div class="col-sm-12"><b>{{field.field.label}} :</b></div> <div class="col-sm-12"><input type="{{ field.field.widget.input_type }}" class="form-control" name="{{ field.name }}"     placeholder="{{ field.label}}" value="{% if field.value %}{{field.value}}{% endif %}"></div> {% if field.errors %} <div class="col-sm-10 text-danger"> {{ field.errors }} </div> {% endif %} </div> {% endfor %}  <!-- provide button click submit form -->    <div class="form-group"> <div class="col-sm-offset-0 col-sm-10">   <button type="submit" class="btn btn-warning"><b>sign up</b></button><br><br>   <div>or have account? <a href="{% url 'accounts:login' %}"><span class="btn btn-xs btn-default">log in</span></a></div> </div> </div> </form> 


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -