Model design common techniques and precautions

  • 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;"

 

Guess you like

Origin www.cnblogs.com/echo1937/p/11291874.html