-
verbose_name can be used as the first argument, writing more neat and orderly;
= models.CharField name ( ' category name ' , default = "" , 30 = MAX_LENGTH, help_text = " category name " )
-
null = True, blank = True generally occur simultaneously, the former said database field can be null, which indicates the form required = False, that can blank;
= models.DateField Birthday ( " date of birth " , null = True, blank = True)
-
Foreign keys to set on_delete = models.CASCADE, represents cascading deletes (default);
category = models.ForeignKey(GoodsCategory, on_delete=models.CASCADE, verbose_name="商品类目")
-
related_name foreign key can reverse query manager named;
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品", related_name="images")
-
Try to set for each model and field verbose_name, but also try to achieve __str__ method for each model, easy document management projects;
class Meta: verbose_name = '商品轮播' verbose_name_plural = verbose_name def __str__(self): return self.goods.name
-
Whether USE_TZ is False / True, try to use django.utils.timezone.now (), of course, a better approach is to use auto_now / auto_now_add = True;
add_time = models.DateTimeField(default=timezone.now, verbose_name="添加时间")
-
To achieve decoupling between the Model using a similar method get_user_model;
# get_user_model方法会去setting中找AUTH_USER_MODEL from django.contrib.auth import get_user_model User = get_user_model()
-
Adding a unique parameter 'unique constraint';
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")
-
Please MySQL database storage engine is set to INNODB;
"OPTIONS":{"init_command":"SET default_storage_engine=INNODB;"