博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
datetime的小坑
阅读量:6331 次
发布时间:2019-06-22

本文共 3874 字,大约阅读时间需要 12 分钟。

在做悦运动这个项目时,在创建约运动关系表时,运动开始时间,注意(导入datetime包时,我导入的是class datetime(__datetime.date)这个类,可以调用这个类中的方法,调用当前时间直接可以调用datetime.now()

1 from datetime import datetime 2 ...... 3 class Schedule(models.Model): 4     ''' 5     发起约运动 6     ''' 7     Status = ((1, '已完成'), (2, '待人加入'), (3, '已取消')) 8     user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name='发起人') 9     join_type = models.BooleanField(verbose_name='是否发起人')10     now_people = models.IntegerField(verbose_name='已有人数', null=True, blank=True)11     school = models.ForeignKey(Schools, on_delete=models.CASCADE, verbose_name='学校', default='')12     sport = models.ForeignKey(Sports, on_delete=models.CASCADE, verbose_name='运动项目')13     address = models.CharField(verbose_name='约定地点', max_length=100)14     sport_time = models.DateTimeField(verbose_name='约定运动开始时间')15     sport_end_time = models.DateTimeField(verbose_name='约定运动结束时间', default='')16     people_nums = models.IntegerField(verbose_name='人数')17     add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间')18     status = models.IntegerField(choices=Status, verbose_name='状态')19 20     class Meta:21         verbose_name = '发起约运动'22         verbose_name_plural = verbose_name23 24     def __str__(self):25         return self.sport.sport_name + '-' + str(self.sport_time)26 27 28 class JoinSchedule(models.Model):29     '''30     加入的运动31     '''32     schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE, verbose_name='加入的运动')33     user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name='用户')34     add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间')35 36     class Meta:37         verbose_name = '加入运动'38         verbose_name_plural = verbose_name39 40     def __str__(self):41         return str(self.schedule_id) + '--' + str(self.user_id)

 

 而在序列化该表时,导入的是datetime:class datetime,包含了datetime这个模块所有方法,获得当前时间可以datetime.datetime.now(),如第十五行

1 import datetime 2 class MyJoinScheduleSerializer(serializers.ModelSerializer): 3     ''' 4     加入约运动序列化 5     ''' 6     user = serializers.HiddenField(default=serializers.CurrentUserDefault()) 7     add_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') 8  9     def create(self, validated_data):10         user = self.context['request'].user11         schedule = validated_data['schedule']12         if Schedule.objects.filter(user=schedule.user, id=schedule.id).first().user == user:13             raise serializers.ValidationError('您是该运动的发起人,已默认加入')14         double_status = False15         schedules = JoinSchedule.objects.filter(user=user,schedule__sport_time__gt=datetime.datetime.now())16         if schedules:17             for s in schedules:18                 if s.schedule.sport_time > schedule.sport_end_time or schedule.sport_time >= s.schedule.sport_end_time:19                     pass20                 else:21                     double_status = True22                     break23         if double_status:24             raise serializers.ValidationError({
"time_error":"与你已有的预约运动时间冲突"})25 else:26 existed = JoinSchedule.objects.create(**validated_data)27 return existed28 29 class Meta:30 model = JoinSchedule31 fields = '__all__'32 validators = [33 UniqueTogetherValidator(34 queryset=JoinSchedule.objects.all(),35 fields=('user', 'schedule'),36 message='已经加入'37 )38 ]

 

 

运行测试时会报错;type object 'datetime.datetime' has no attribute 'datetime'(对象'datetime.datetime'类型没有属性'datetime'),原因:

     from datetime import datetime 已经相当于把命名空间引入到datetime.datetime一层,而在序列化时,又是import datetime,调用datetime.datetime.noe()会让编译器在datetime.datetime空间下去找datetime类。

但是datetime类是应该在datetime空间下的,所以会报错,主要是由于两个datetime不是一个等级的。

转载于:https://www.cnblogs.com/lyq-biu/p/9584767.html

你可能感兴趣的文章
泛型排序器TComparer
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
创建符合标准的、有语意的HTML页面——ASP.NET 2.0 CSS Friendly Control Adapters 1.0发布...
查看>>
Adobe驳斥Flash过度耗电论 称HTML5更耗电
查看>>
No!No!No! It's not fashion!
查看>>
艰困之道中学到的经验教训
查看>>
互联网生态建设落地五大挑战——保险科技生态建设 ...
查看>>
进行短视频app开发工作时,可以加入它来保护青少年 ...
查看>>
25G DAC无源高速线缆和25G光模块之间的区别
查看>>
乐乐茶完成近2亿元Pre-A轮融资,祥峰投资领投
查看>>
clickhouse修改时区
查看>>
CSS_定位
查看>>
第二十四章:页面导航(六)
查看>>
百度、长沙加码自动驾驶,湖南阿波罗智行科技公司成立 ...
查看>>
Java面试笔试题大汇总一(最全+详细答案)
查看>>
10 个 Linux 中方便的 Bash 别名
查看>>
[Server] 服务器配置SSH登录邮件通知
查看>>
全新 DOCKER PALS 计划上线,带给您不一样的参会体验! ...
查看>>
Android开发之自定义View(二)
查看>>
python爬虫之微打赏(scrapy版)
查看>>