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

 from datetime import datetime
......
class Schedule(models.Model):
'''
发起约运动
'''
Status = ((1, '已完成'), (2, '待人加入'), (3, '已取消'))
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name='发起人')
join_type = models.BooleanField(verbose_name='是否发起人')
now_people = models.IntegerField(verbose_name='已有人数', null=True, blank=True)
school = models.ForeignKey(Schools, on_delete=models.CASCADE, verbose_name='学校', default='')
sport = models.ForeignKey(Sports, on_delete=models.CASCADE, verbose_name='运动项目')
address = models.CharField(verbose_name='约定地点', max_length=100)
sport_time = models.DateTimeField(verbose_name='约定运动开始时间')
sport_end_time = models.DateTimeField(verbose_name='约定运动结束时间', default='')
people_nums = models.IntegerField(verbose_name='人数')
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间')
status = models.IntegerField(choices=Status, verbose_name='状态') class Meta:
verbose_name = '发起约运动'
verbose_name_plural = verbose_name def __str__(self):
return self.sport.sport_name + '-' + str(self.sport_time) class JoinSchedule(models.Model):
'''
加入的运动
'''
schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE, verbose_name='加入的运动')
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name='用户')
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间') class Meta:
verbose_name = '加入运动'
verbose_name_plural = verbose_name def __str__(self):
return str(self.schedule_id) + '--' + str(self.user_id)

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

 import datetime
class MyJoinScheduleSerializer(serializers.ModelSerializer):
'''
加入约运动序列化
'''
user = serializers.HiddenField(default=serializers.CurrentUserDefault())
add_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') def create(self, validated_data):
user = self.context['request'].user
schedule = validated_data['schedule']
if Schedule.objects.filter(user=schedule.user, id=schedule.id).first().user == user:
raise serializers.ValidationError('您是该运动的发起人,已默认加入')
double_status = False
schedules = JoinSchedule.objects.filter(user=user,schedule__sport_time__gt=datetime.datetime.now())
if schedules:
for s in schedules:
if s.schedule.sport_time > schedule.sport_end_time or schedule.sport_time >= s.schedule.sport_end_time:
pass
else:
double_status = True
break
if double_status:
raise serializers.ValidationError({"time_error":"与你已有的预约运动时间冲突"})
else:
existed = JoinSchedule.objects.create(**validated_data)
return existed class Meta:
model = JoinSchedule
fields = '__all__'
validators = [
UniqueTogetherValidator(
queryset=JoinSchedule.objects.all(),
fields=('user', 'schedule'),
message='已经加入'
)
]

运行测试时会报错;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不是一个等级的。

datetime的小坑的更多相关文章

  1. MySQL中字段类型为timestamp的小坑

    之前遇到过一个MySQL的字段为timestamp类型的小坑. MySQL中一个字段存储时间类型数据的时候,该字段的类型如果为timestamp类型的话,最多只能存储到2038-01-19 11:14 ...

  2. mciSendString 的两个小坑

    刚刚修正了自己用的小闹钟的代码. 坑1:REPEAT 选项的作用范围 原来用得好好的,之后选择 .wav 文件,居然不出声音了…… 诶,MCI 肯定支持 .wav 的啊…… 仔细想想,我以前都是选 . ...

  3. 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式

    注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...

  4. C#中的Infinity有个小坑

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...

  5. 使用EMMET中的小坑

    使用EMMET写HTML的时候,是一个非常爽的事情.但是今天我使用时,发现一个小坑.以前倒也没有注意,不过需要非常的小心. form[action="/process" metho ...

  6. 关于CSS3中transform变换的小坑

    2017年6月30日15:05:46 今天在写一个demo的时候,发现CSS3中transform变换的一个特性. 首先,我先描述一下我发现的情况(问题再现): <div class=" ...

  7. Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理

    基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...

  8. go的变量redeclare的问题,golang的一个小坑

    go的变量声明有几种方式: 1 通过关键字 var 进行声明 例如:var i int   然后进行赋值操作 i = 5 2 最简单的,通过符号 := 进行声明和赋值 例如: i:=5 golang会 ...

  9. mysql url 连接配置的一个小坑。 工作中不会遇到。 学习的时候会

    <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> & ...

随机推荐

  1. oracle 定期迁移分区表数据(不落地)

    [oracle@SJ ~]$ cat /home/oracle/JY_SJ.sh #!/bin/bashsource /home/oracle/.bash_profileSDATE=$(date  + ...

  2. AWS 为 Elasticsearch 推出开源发行版

    WS 近日宣布为 Elasticsearch 推出开源发行版 Open Distro for Elasticsearch. Elasticsearch 是一个分布式.面向文档的搜索和分析引擎,它支持结 ...

  3. python 全栈开发,Day37(操作系统的发展史)

    昨日内容回顾: # C/S和B/S架构 # osi五层模型 # 应用层 # 自定义协议(struct) _ 解决黏包 # 验证客户端合法性 _ hmac os.urandom # 解决TCP协议的se ...

  4. spring HibernateTemplate.save() 方法的自动提交问题

    如题: service1: dao1.save(obj);   //失败,应该给spring捕获,但没有,程序继续执行下去了. redisService.fun1();  //被执行 service2 ...

  5. 洛谷P1553 数字翻转(升级版)

    题目链接 https://www.luogu.org/problemnew/show/P1553 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的 ...

  6. UOJ14 DZY Loves Graph 并查集

    传送门 题意:给出一张$N$个点,最开始没有边的图,$M$次操作,操作为加入边(边权为当前的操作编号).删除前$K$大边.撤销前一次操作,每一次操作后询问最小生成树边权和.$N \leq 3 \tim ...

  7. [Oracle]如何在Oracle中设置Event

    为了调查Oracle 的故障,可以通过设置event ,来了解详细的状况.方法如下: ■ 如果使用 SPFILE, =============To enable it: 1. Check the cu ...

  8. Caffe源码中math_functions文件分析

    Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下math_functions文件. 1.      include文件: ...

  9. Qt Creator 中,如何更改h,cpp,ui的文件并不让ui失效

    这个星期在使用qt,碰到一个很蛋疼的问题:创建对话框的时候,不小心输错了名字.而且是在很迟才发现的.这个时候对话框都已经布局差不多了,为了改名字,碰到更蛋疼的问题,改了名字后就无法使用转到槽的功能了. ...

  10. TCP服务端开发为例--web开发不同url请求为何会走不同方法

    拿java的web开发为例子,相信有很多小伙伴是做j2EE开发的,htpp请求,json数据传输都是工作中经常用的,查询请求,添加请求,修改请求前端配个url,例如https://localhost/ ...