class Schedule(Model): sections = ManyToManyField(Section, blank=True) start_time = TimeField(default=datetime.time(7)) end_time = TimeField(default=datetime.time(22)) def __unicode__(self): return "Schedule (%s)" % unicode(self.id)
class SectionTime(Model): TIME_PATTERNS = ['MWF', 'MW', 'MF', 'WF', 'TH', 'MTWH', 'MTWF'] TIME_PATTERN_CHOICES = [(TIME_PATTERNS.index(time_pattern), time_pattern) for time_pattern in TIME_PATTERNS] time_pattern = IntegerField(choices=TIME_PATTERN_CHOICES) start_time = TimeField() length = DecimalField(max_digits=3, decimal_places=2, verbose_name='Length (Hours)') def __unicode__(self): length_digits = self.length.as_tuple().digits length_hours = length_digits[0] try: length_minutes = (60 * ((length_digits[1] * 10) + length_digits[2]) ) / 100 # Integer math gets nice minute numbers except IndexError: length_minutes = 0 # A bit of a hack to get time and delta to play together nicely. end_time = ( datetime.datetime.combine(datetime.date.today(), self.start_time) + datetime.timedelta(hours=length_hours, minutes=length_minutes)).time() return self.TIME_PATTERNS[self.time_pattern] + " " + unicode( self.start_time) + " - " + unicode(end_time)
def test_convert_values_to_handle_null_value(self): database_operations = DatabaseOperations(connection) self.assertEqual( None, database_operations.convert_values(None, AutoField(primary_key=True)) ) self.assertEqual( None, database_operations.convert_values(None, DateField()) ) self.assertEqual( None, database_operations.convert_values(None, DateTimeField()) ) self.assertEqual( None, database_operations.convert_values(None, DecimalField()) ) self.assertEqual( None, database_operations.convert_values(None, IntegerField()) ) self.assertEqual( None, database_operations.convert_values(None, TimeField()) )
def test_convert_values_to_handle_null_value(self): from django.db.backends.sqlite3.base import DatabaseOperations convert_values = DatabaseOperations(connection).convert_values self.assertIsNone(convert_values(None, AutoField(primary_key=True))) self.assertIsNone(convert_values(None, DateField())) self.assertIsNone(convert_values(None, DateTimeField())) self.assertIsNone(convert_values(None, DecimalField())) self.assertIsNone(convert_values(None, IntegerField())) self.assertIsNone(convert_values(None, TimeField()))
class TruncTime(TruncBase): kind = "time" lookup_name = "time" output_field = TimeField() def as_sql(self, compiler, connection): # Cast to time rather than truncate to time. sql, params = compiler.compile(self.lhs) tzname = self.get_tzname() return connection.ops.datetime_cast_time_sql(sql, tuple(params), tzname)
class TruncTime(TruncBase): kind = 'time' lookup_name = 'time' output_field = TimeField() def as_sql(self, compiler, connection): # Cast to time rather than truncate to time. lhs, lhs_params = compiler.compile(self.lhs) tzname = self.get_tzname() sql = connection.ops.datetime_cast_time_sql(lhs, tzname) return sql, lhs_params
class TruncTime(TruncBase): kind = 'time' lookup_name = 'time' output_field = TimeField() def as_sql(self, compiler, connection): # Cast to time rather than truncate to time. lhs, lhs_params = compiler.compile(self.lhs) tzname = timezone.get_current_timezone_name() if settings.USE_TZ else None sql = connection.ops.datetime_cast_time_sql(lhs, tzname) return sql, lhs_params
class Offer(models.Model): title = models.CharField(max_length=100, verbose_name='title') content = models.TextField(verbose_name='content') location = models.CharField(max_length=100, verbose_name='location') date = models.DateField(default='20/12/2021') time = TimeField(null=True) duration = PositiveIntegerField(null=True) date_posted = models.DateTimeField(default=timezone.now) author = models.ForeignKey(User, on_delete=models.CASCADE) image = models.ImageField(default='defaultservice.jpg', upload_to='post_pics') max_participants = models.PositiveIntegerField( default=3, validators=[MinValueValidator(1)]) timecredit = models.PositiveIntegerField(default=1) num_participants = models.PositiveIntegerField(default=0) finished_participants = models.ManyToManyField( User, related_name="finished_offers") current_participants = models.ManyToManyField( User, related_name="current_offers") waiting_participants = models.ManyToManyField( User, related_name="waiting_offers") def __str__(self): return self.title def get_absolute_url(self): #redirect to its own detail page after being created return reverse('offer-detail', kwargs={'pk': self.pk}) def clean(self): if self.num_participants > self.max_participants: raise ValidationError( _('Maximum number of participants cannot be less than number of current participants!' )) @property def feedback_senders(self): return list(self.feedbacks.values_list("sender__username", flat=True)) @property def feedback_receivers(self): return list(self.feedbacks.values_list("receiver__username", flat=True)) def get_type(self): return "offer"
def _load_period_ipstat(fill_date: date, period: timedelta): end_time = timezone.make_aware( time(hour=23, minute=59, second=59, microsecond=999999)) end_date = datetime.combine(fill_date, end_time) start_date = (end_date - period).replace(hour=0, minute=0, second=0, microsecond=0) return Lead.objects \ .filter(session_started__range=(start_date, end_date)) \ .filter(ip_addr__isnull=False) \ .values('ip_addr', 'geo', 'geo__country', 'geo__postal_code', 'provider') \ .annotate(s_cnt=Count('id')) \ .annotate(s_time=Sum(ExpressionWrapper( Coalesce('created', 'last_event_time') - F('session_started'), output_field=DurationField()))) \ .annotate(s0_cnt=Count(Case( When(created__isnull=True, then=F('id')), default=None, output_field=UUIDField()))) \ .annotate(s_beg=Cast(Avg( Cast(F('session_started'), output_field=TimeField()) ), output_field=TimeField())) \ .annotate(user_ids=ArrayAgg('pixel__project__user__id', distinct=True))\ .annotate(cnt_dev=Count('device_id'))
class Flavor(Model): name = CharField(max_length=255) label = CharField(max_length=255) parent = ForeignKey("self", blank=True, null=True, on_delete=SET_NULL) float_value = FloatField(blank=True, null=True) decimal_value = DecimalField(blank=True, null=True, max_digits=10, decimal_places=2) uuid = UUIDField(default=uuid.uuid4) datetime = DateTimeField(blank=True, null=True) date = DateField(blank=True, null=True) time = TimeField(blank=True, null=True) duration = DurationField(blank=True, null=True) def __str__(self): return self.name
class Post(models.Model): title = models.CharField(max_length=100, verbose_name='title') content = models.TextField(verbose_name='content') # city = models.CharField(max_length=255) # location = PlainLocationField(based_fields=['city'], zoom=7) location = models.CharField(max_length=100, verbose_name='location') date = models.DateField(default='20/12/2021') date_posted = models.DateTimeField(default=timezone.now) author = models.ForeignKey(User, on_delete=models.CASCADE) image = models.ImageField(default='defaultservice.jpg', upload_to='post_pics') time = TimeField(null=True) duration = PositiveIntegerField(null=True) def __str__(self): return self.title def get_absolute_url(self): #redirect to its own detail page after being created return reverse('post-detail', kwargs={'pk': self.pk}) def get_type(self): return "post"
class HourTransform(DateTransform): lookup_name = 'hour' class MinuteTransform(DateTransform): lookup_name = 'minute' class SecondTransform(DateTransform): lookup_name = 'second' DateField.register_lookup(YearTransform) DateField.register_lookup(MonthTransform) DateField.register_lookup(DayTransform) DateField.register_lookup(WeekDayTransform) TimeField.register_lookup(HourTransform) TimeField.register_lookup(MinuteTransform) TimeField.register_lookup(SecondTransform) DateTimeField.register_lookup(DateTimeDateTransform) DateTimeField.register_lookup(YearTransform) DateTimeField.register_lookup(MonthTransform) DateTimeField.register_lookup(DayTransform) DateTimeField.register_lookup(WeekDayTransform) DateTimeField.register_lookup(HourTransform) DateTimeField.register_lookup(MinuteTransform) DateTimeField.register_lookup(SecondTransform)
lookup_name = 'minute' class ExtractSecond(Extract): lookup_name = 'second' DateField.register_lookup(ExtractYear) DateField.register_lookup(ExtractMonth) DateField.register_lookup(ExtractDay) DateField.register_lookup(ExtractWeekDay) DateField.register_lookup(ExtractWeek) DateField.register_lookup(ExtractIsoYear) DateField.register_lookup(ExtractQuarter) TimeField.register_lookup(ExtractHour) TimeField.register_lookup(ExtractMinute) TimeField.register_lookup(ExtractSecond) DateTimeField.register_lookup(ExtractHour) DateTimeField.register_lookup(ExtractMinute) DateTimeField.register_lookup(ExtractSecond) ExtractYear.register_lookup(YearExact) ExtractYear.register_lookup(YearGt) ExtractYear.register_lookup(YearGte) ExtractYear.register_lookup(YearLt) ExtractYear.register_lookup(YearLte) ExtractIsoYear.register_lookup(YearExact) ExtractIsoYear.register_lookup(YearGt)
def test_TimeField(self): self.assertIsInstance( TimeField().get_prep_value(datetime.datetime.now().time()), datetime.time)
def test_TimeField(self): lazy_func = lazy(lambda: datetime.datetime.now().time(), datetime.time) self.assertIsInstance(TimeField().get_prep_value(lazy_func()), datetime.time)
from copy import copy from django.conf import settings from django.db.models.expressions import Func, Value from django.db.models.fields import ( DateField, DateTimeField, Field, IntegerField, TimeField, ) from django.db.models.query_utils import RegisterLookupMixin from django.utils import timezone from django.utils.functional import cached_property from django.utils.six.moves import range class Lookup(object): lookup_name = None def __init__(self, lhs, rhs): self.lhs, self.rhs = lhs, rhs self.rhs = self.get_prep_lookup() if hasattr(self.lhs, 'get_bilateral_transforms'): bilateral_transforms = self.lhs.get_bilateral_transforms() else: bilateral_transforms = [] if bilateral_transforms: # We should warn the user as soon as possible if he is trying to apply # a bilateral transformation on a nested QuerySet: that won't work. # We need to import QuerySet here so as to avoid circular from django.db.models.query import QuerySet if isinstance(rhs, QuerySet): raise NotImplementedError("Bilateral transformations on nested querysets are not supported.") self.bilateral_transforms = bilateral_transforms def apply_bilateral_transforms(self, value): for transform in self.bilateral_transforms:
class Horario(models.Model): inicio = TimeField() final = TimeField() descripcion = CharField(max_length=100, null=False, blank=False)
class ExtractSecond(Extract): lookup_name = "second" DateField.register_lookup(ExtractYear) DateField.register_lookup(ExtractMonth) DateField.register_lookup(ExtractDay) DateField.register_lookup(ExtractWeekDay) DateField.register_lookup(ExtractIsoWeekDay) DateField.register_lookup(ExtractWeek) DateField.register_lookup(ExtractIsoYear) DateField.register_lookup(ExtractQuarter) TimeField.register_lookup(ExtractHour) TimeField.register_lookup(ExtractMinute) TimeField.register_lookup(ExtractSecond) DateTimeField.register_lookup(ExtractHour) DateTimeField.register_lookup(ExtractMinute) DateTimeField.register_lookup(ExtractSecond) ExtractYear.register_lookup(YearExact) ExtractYear.register_lookup(YearGt) ExtractYear.register_lookup(YearGte) ExtractYear.register_lookup(YearLt) ExtractYear.register_lookup(YearLte) ExtractIsoYear.register_lookup(YearExact) ExtractIsoYear.register_lookup(YearGt)
class Visite(Model): state = BooleanField(default=False) id_habitation = ForeignKey(Habitation, on_delete=CASCADE) #id_logement date = DateField() hour = TimeField() id_seeker = ForeignKey(Seeker, on_delete=CASCADE)
class CaThi(models.Model): ''' Thiet lap mot ca thi, trong do co danh sach cau hoi de tu do lam cac de thi cho tung sinh vien ''' title = CharField(verbose_name="Ca thi", max_length=200, blank=False) description=TextField(verbose_name="Ghi chú", blank=True, null=True) mon_thi = ForeignKey(MonThi, blank=False, null=False, verbose_name="Môn thi") # lop_thi = ForeignKey(Lop, blank=False, null=False, # verbose_name="Lớp thi") # ds_thisinh = ForeignKey(Lop_CaThi, blank=False, null=False, # verbose_name="Danh sách thí sinh") ds_giamthi = ManyToManyField(GiaoVien, verbose_name=u'Danh sách giám thị coi thi') ds_thisinh = ManyToManyField(SinhVien, blank=False, verbose_name=u"Danh sách thí sinh") ds_thisinh.help_text = 'Tìm kiếm theo họ tên sinh viên hoặc mã lớp.' ngay_thi = DateField(verbose_name="Ngày thi") tg_bat_dau=TimeField(verbose_name="Thời gian bắt đầu") tg_ket_thuc=TimeField(verbose_name="Thời gian kết thúc") ds_cau_hoi = CommaSeparatedIntegerField(max_length=1024, verbose_name="Danh sach cau hoi (ids)") # setting = ManyToManyField(QuestionGroup_Setting, # verbose_name="Thiết lập cấu hình ca thi") tao_moi_de_thi = BooleanField(blank=False, null=False, verbose_name="Tạo mới đề thi cho các sinh viên", default=True) random_order = BooleanField(blank=False, null=False, verbose_name="Hiển thị câu hỏi ngẫu nhiên", default=True) answers_at_end = BooleanField(blank=False, null=False, verbose_name="Hiển thị câu trả lời khi kết thúc", default=False) result_at_end = BooleanField(blank=False, null=False, verbose_name="Hiển thị kết quả khi kết thúc", default=True) exam_paper = BooleanField(blank=False, null=False, verbose_name="Lưu bài thi", default=True) single_attempt = BooleanField(blank=False, null=False, verbose_name="Mỗi người một đề thi", default=True) pass_mark = PositiveIntegerField(verbose_name="Điểm đạt yêu cầu") success_text = TextField(blank=True, verbose_name="Thông báo được hiển thị nếu thí sinh vượt qua") fail_text = TextField(blank=True, verbose_name="Thông báo được hiển thị nếu thí sinh không vượt qua") draft=BooleanField(verbose_name="Bản nháp", default=False) class Meta: verbose_name = "Ca thi" verbose_name_plural = "Danh sách ca thi" def __unicode__(self): return u'%s' %(self.title) def save(self, *args, **kwargs): # luu CaThi va Cathi_Setting # super(CaThi, self).save(*args, **kwargs) # # lay danh sach cau hoi cho ca thi # # lay cathi_setting questionGroup_settings = QuestionGroup_Setting.objects.filter(ca_thi__exact=self) # # cac cau hoi cua de thi questions = [] for cathi_setting in questionGroup_settings: # lay cau hoi theo nhom va loai (type) qs = Question.objects.filter(mon_thi=self.mon_thi, question_type = cathi_setting.question_type, question_group = cathi_setting.question_group) # lay id q_ids = qs.values_list('id', flat=True) # lay ngau nhien so cau hoi questions += sample(q_ids, cathi_setting.num_of_questions) self.ds_cau_hoi = ','.join(map(str, questions)) + "," # luu CaThi-ds_cauhoi super(CaThi, self).save(*args, **kwargs) # tao de thi cho tung sinh vien # lay danh sach sinh vien cua lop # dsSV = SinhVien.objects.filter(lop=self.lop_thi) dsSV = self.ds_thisinh.all() if(self.tao_moi_de_thi == False): return # voi moi sinh vien, tao mot de thi for sv in dsSV: # tao de thi dethi = DeThi.objects.update_or_create(sinh_vien=sv, ca_thi=self, )[0] # lay ngau nhien cau hoi trong ngan hang de ds_cauhoi = sample(questions, len(questions)) ds_cauhoi_answer = [] for cauhoi_id in ds_cauhoi: # lay cau hoi voi id tuong ung q = Question.objects.get(id=cauhoi_id) # neu cau hoi la multichoice question thi hoan doi thu tu # cau tra loi if q.question_type == MCQUESTION: # lay cac cau tra loi cua cau hoi nay # q = (MCQuestion)q # answers = Answer.objects.filter(question=q.id) q.__class__ = MCQuestion answers = q.getAnswers() # lay id cua cac cau hoi answer_ids = answers.values_list('id', flat=True) # dao thu tu cau tra loi answer_ids = sample(answer_ids, len(answer_ids)) # add vao mot dictionary ds_cauhoi_answer.append((cauhoi_id, answer_ids)) elif q.question_type == TFQUESTION: ds_cauhoi_answer.append((cauhoi_id, [1, 0])) else: ds_cauhoi_answer.append((cauhoi_id, [])) dethi.ds_cau_hoi = json.dumps(ds_cauhoi_answer) dethi.save()
class Time_slots(Model): hour = TimeField()