导读:今天首席CTO笔记来给各位分享关于django修改model之后如何操作的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
Django model update(修改) 修改时间并没有触发的问题
我们都知道 django 里面模型设计 一般会有常用的两个字段 创建时间 和 修改时间,这两个字段的定义是这样的:
一般来说,你对这个表的数据有修改的时候,修改时间会随之变动,但是我遇到一个情况,是即使你修改了这条数据的内容,但是修改时间并没有变动。
问题解决:
修改更新有两种方法
1)save
修改模型类对象的属性,然后执行save()方法
2)update
使用模型类.objects.filter().update(),会返回受影响的行数
第一种修改更新的方法是会触发updated = models.DateTimeField(auto_now=True, verbose_name="更新时间")字段的更新时间的,第二种不会触发。
所以如果你更新的数据没有触发更新时间,检查是否用了第二种方法,换成第一种修改的方式就可以了。
解决:
如果要用 update 这种方法修改多条数据,触发更新时间的字段,可以这样做:
加一条修改数据,把修改时间这个字段修改成当前时间就可以了。
如何实现Django动态修改model字段定义属性
Django可以获取一个model里字段定义的属性:
User._meta.get_field_by_name('username')
返回的是tuple,所以没法修改
数据库中有一数据表table_a,且该表没有主键也无唯一键,有一列row1数据都是不同的(没有唯一键),对应的django中的model为:
class TableA(models.Model):
row1 = models.CharField(primary_key=True, max_length=36)
row2 = models.CharField(max_length=36)
row3 = models.CharField(max_length=36)
class Meta:
db_table = u'table_a'
django中对应的model设置row1为主键,一切正常
如果row1有重复数据,model在过滤的时候去重,使用model一切正常
objs = TableA.objects.filter(Q('取出row1中的重复项'))
如果要操作那些重复项(只有row1中的数据是重复的),但这些重复项中row2和row3的数据都是不同的
如果能动态设置model字段属性就都解决了
当然直接用sql也可以
django1.8更改了model后要怎样重建数据库
从Java web转过来学习django,有些方法逻辑不习惯,直接修改model更新到数据库:执行如下命令即可 python manage.py makemigrations myapp python manage.py migrate
结语:以上就是首席CTO笔记为大家介绍的关于django修改model之后如何操作的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。