def profile_settings(request): """ Allows a user to update their own profile. """ user = request.user has_skills = Skill.objects.count() > 0 has_roles = Role.objects.count() > 0 SkillFormSet = formset_factory(SkillForm, formset=BaseSkillFormSet) user_skills = UserSkill.objects.filter(user=user).order_by('skill__name') skill_data = [{'skill': s.skill, 'proficiency': s.proficiency} for s in user_skills] LinkFormSet = formset_factory(LinkForm, formset=BaseLinkFormSet) user_links = UserLink.objects.filter(user=user).order_by('anchor') link_data = [{'anchor': l.anchor, 'url': l.url} for l in user_links] if request.method == 'POST': form = ProfileForm(request.POST, user=user) skill_formset = SkillFormSet(request.POST, prefix='skill') link_formset = LinkFormSet(request.POST, prefix='link') if form.is_valid() and skill_formset.is_valid() \ and link_formset.is_valid(): # Save user info user.first_name = form.cleaned_data['first_name'] user.last_name = form.cleaned_data['last_name'] user.bio = form.cleaned_data['bio'] user.roles = form.cleaned_data['roles'] user.save() save_skills(request, user, skill_formset) save_links(request, user, link_formset) user_links = UserLink.objects.filter(user=user) match_link_to_brand(user_links) site = get_current_site(request) messages.success(request, _( 'Your {} profile has been updated.'.format(site.name))) else: form = ProfileForm(user=user) skill_formset = SkillFormSet(initial=skill_data, prefix='skill') link_formset = LinkFormSet(initial=link_data, prefix='link') context = { 'form': form, 'skill_formset': skill_formset, 'link_formset': link_formset, 'has_skills': has_skills, 'has_roles': has_roles, } return render(request, 'accounts/profile_settings.html', context)
def test_can_match_link_to_brand(self): github = BrandFactory() link_user = UserFactory() link = UserLinkFactory( user=link_user, anchor='Github', url='http://github.com/myaccount/', ) userlinks = [link] match_link_to_brand(userlinks) link = UserLink.objects.get(user=link_user) self.assertEqual(link.icon, github)
def profile_settings(request): """ Allows a user to update their own profile. """ user = request.user has_skills = Skill.objects.count() > 0 has_roles = Role.objects.count() > 0 SkillFormSet = formset_factory(SkillForm, formset=BaseSkillFormSet) user_skills = UserSkill.objects.filter(user=user).order_by('skill__name') skill_data = [{ 'skill': s.skill, 'proficiency': s.proficiency } for s in user_skills] LinkFormSet = formset_factory(LinkForm, formset=BaseLinkFormSet) user_links = UserLink.objects.filter(user=user).order_by('anchor') link_data = [{'anchor': l.anchor, 'url': l.url} for l in user_links] if request.method == 'POST': form = ProfileForm(request.POST, user=user) skill_formset = SkillFormSet(request.POST, prefix='skill') link_formset = LinkFormSet(request.POST, prefix='link') forms = [form, link_formset] if has_skills: forms.append(skill_formset) if all([f.is_valid() for f in forms]): # Save user info user.full_name = form.cleaned_data['full_name'] user.bio = form.cleaned_data['bio'] user.roles = form.cleaned_data['roles'] user.save() if has_skills: save_skills(request, user, skill_formset) save_links(request, user, link_formset) user_links = UserLink.objects.filter(user=user) match_link_to_brand(user_links) site = get_current_site(request) messages.success( request, _('Your {} profile has been updated.'.format(site.name))) else: form = ProfileForm(user=user) skill_formset = SkillFormSet(initial=skill_data, prefix='skill') link_formset = LinkFormSet(initial=link_data, prefix='link') context = { 'form': form, 'skill_formset': skill_formset, 'link_formset': link_formset, 'has_skills': has_skills, 'has_roles': has_roles, } return render(request, 'accounts/profile_settings.html', context)