from django import forms from django.core.exceptions import ValidationError from django.utils import timezone from django.contrib.auth.models import Group from university.models import UserCourse, User, GroupCourse class AdminGrantUserCourseForm(forms.Form): user_id = forms.IntegerField(required=True) expires_at = forms.DateTimeField(required=True) def __init__(self, staff, course, *args, **kwargs): self.target_user = None self.staff = staff self.course = course super(AdminGrantUserCourseForm, self).__init__(*args, **kwargs) def clean_user_id(self): user_id = self.cleaned_data.get('user_id') if user_id: try: self.target_user = User.objects.get(id=user_id) except Exception: raise ValidationError('未找到该用户') if UserCourse.objects.filter( user=self.target_user, course=self.course).exists(): raise ValidationError('该用户已有权限') return user_id def clean_expires_at(self): expires_at = self.cleaned_data.get('expires_at') if expires_at and expires_at < timezone.now(): raise ValidationError('不能晚于当前时间') return expires_at def save(self): UserCourse.objects.create( user=self.target_user, course=self.course, expires_at=self.cleaned_data.get('expires_at'), created_by=self.staff ) class AdminGrantGroupCourseForm(forms.Form): group_id = forms.IntegerField(required=True) def __init__(self, staff, course, *args, **kwargs): self.target_group = None self.staff = staff self.course = course super(AdminGrantGroupCourseForm, self).__init__(*args, **kwargs) def clean_group_id(self): group_id = self.cleaned_data.get('group_id') if group_id: try: self.target_group = Group.objects.get(id=group_id) except Exception: raise ValidationError('未找到该组') if GroupCourse.objects.filter( group=self.target_group, course=self.course).exists(): raise ValidationError('该组已有权限') return group_id def save(self): GroupCourse.objects.create( group=self.target_group, course=self.course, created_by=self.staff )