Django模型进阶

   一、扩展auth_user表

   在settings.py中添加配置AUTH_USER_MODEL='blog.userinfo',添加该配置后不再创建auth_user表,然后在userinfo类中继承AbstractUser类,如下

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):   
    """
    用户信息
    """
    nid = models.BigAutoField(primary_key=True)
    nickname = models.CharField(verbose_name='昵称', max_length=32)
    telephone = models.CharField(max_length=11, blank=True, null=True, unique=True, verbose_name='手机号码')
    avatar = models.FileField(verbose_name='头像',upload_to = '/upload/avatar',default="/avatar/default.png")
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

    def __str__(self):
        return self.username

 

   二、extra

   Django的extra允许我们在查询时使用部分SQL语句,其有两个参数可选,select参数用于在select从句中添加其他字段信息,使用时应该给select参数传递一个字典,字典的键是查询到的每个model对象的新属性名,字典的值是SQL语句,该SQL语句的查询结果就是model对象新属性的值,比如

#in sqlite
article_obj=models.Article.objects
              .filter(nid=1)
              .extra(select={"standard_time":"strftime('%%Y-%%m-%%d',create_time)"})
              .values("standard_time","nid","title")
print(article_obj)

#结果,<QuerySet [{'title': 'MongoDb 入门教程', 'standard_time': '2017-09-03', 'nid': 1}]>

 

   三、事务

from django.db import transaction  #导入事务模块
  with transaction.atomic(): #绑定事务,with下的所有model操作绑定为一个事务
    models.ArticleThumbsup.objects.create(article_id=article_id,user_id=user.id)
    models.Article.objects.update(thumbsupnum=F('thumbsupnum')+1)

 

posted @ 2017-11-20 16:08  魅力宁波  阅读(148)  评论(0)    收藏  举报