def add_user_to_sheet(request, slug): sheet = get_object_or_404(Sheet, slug=slug) form_by_username = AddUserForm(request.POST or None) groups = UserAPI.get_groups_and_users_dict().keys() by_username_valid = form_by_username.is_valid() if by_username_valid: users = list() username = form_by_username.cleaned_data['username'] if username: users.append(get_object_or_404(User, username=username)) for group in groups: selected_users_pk = form_by_username.cleaned_data[group] for pk in selected_users_pk: users.append(get_object_or_404(User, pk=pk)) for user in users: if user != request.user: remove_perm('sheets.change_sheet', user, sheet) assign_perm('sheets.view_sheet', user, sheet) if form_by_username.cleaned_data['role'] == 'T': assign_perm('sheets.change_sheet', user, sheet) else: MarkAPI.create_marks_for_student(sheet, user) return redirect('sheet_detail', slug=slug) return render(request, 'add_user_to_sheet.html', { 'form_by_username': form_by_username, 'sheet': sheet })
def __init__(self, *args, **kwargs): super(AddUserForm, self).__init__(*args, **kwargs) groups_and_user = UserAPI.get_groups_and_users_dict() for group, users in groups_and_user.items(): self.fields[group] = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=[(user.pk, user) for user in users], required=False)