Model設計中常見的技巧和注意事項
阿新 • • 發佈:2019-08-03
-
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;"
&n