zoukankan      html  css  js  c++  java
  • Model设计中常见的技巧和注意事项

    • verbose_name 可以作为第一个参数传入,使书写更加工整和有序;
    name = models.CharField('类别名',default="", max_length=30,help_text="类别名")
    • null=True, blank=True 一般同时出现,前者表示数据库字段可以为null,后者表示form中required = False,即可以为空白;
    birthday = models.DateField("出生年月",null=True, blank=True)
    • 外键需要设置 on_delete=models.CASCADE,表示级联删除(默认);
    category = models.ForeignKey(GoodsCategory, on_delete=models.CASCADE, verbose_name="商品类目")
    • related_name 可以为外键反向查询的manager命名;
    goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品", related_name="images")
    • 请尽量为每个model和field设置 verbose_name,也尽量为每个model实现__str__方法,便于项目的文档化管理;
    class Meta:
        verbose_name = '商品轮播'
        verbose_name_plural = verbose_name
    
    def __str__(self):
        return self.goods.name
    • 无论USE_TZ is False/True,请尽量使用django.utils.timezone.now(),当然更好的方法是使用 auto_now/auto_now_add = True;
    add_time = models.DateTimeField(default=timezone.now, verbose_name="添加时间")
    • 利用类似 get_user_model 的方法来实现Model之间的解耦;
    # get_user_model方法会去setting中找AUTH_USER_MODEL
    from django.contrib.auth import get_user_model
    User = get_user_model()
    • 使用unique参数添加‘唯一约束’;
    order_sn = models.CharField("订单编号",max_length=30, null=True, blank=True, unique=True)
    
    class Meta:
        verbose_name = '用户收藏'
        verbose_name_plural = verbose_name
        unique_together = ("user", "goods")
    • 请将MySQL的数据库存储引擎设置为INNODB;
    "OPTIONS":{"init_command":"SET default_storage_engine=INNODB;"

     PS:

  • 相关阅读:
    wrk压测工具使用
    Mac 抓包工具wireshark使用
    hadoop无法停止
    非root用户如何使用docker命令
    too many open files
    kafka性能测试1.0.0
    命令查看linux主机配置
    ELK(Logstash+Elasticsearch+Kibana)的原理和详细搭建
    分布式session实现
    NUC972裸机调试步骤
  • 原文地址:https://www.cnblogs.com/echo1937/p/11291874.html
Copyright © 2011-2022 走看看