ORM对象关系映射
映射关系:
表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象
class Customer(models.Model): '''客户信息表''' name = models.CharField(max_length=32,blank=True,null=True) qq = models.CharField(max_length=64,unique=True)
consult_course = models.ForeignKey("Course",verbose_name="咨询课程") content = models.TextField(verbose_name="咨询详情") tags = models.ManyToManyField("Tag",blank=True,null=True,verbose_name="分类标签") status_choices = ((0,'已报名'), (1,'未报名'), ) status = models.SmallIntegerField(choices=status_choices,default=1) consultant = models.ForeignKey("UserProfile",verbose_name="学员顾问") memo = models.TextField(blank=True,null=True,verbose_name="备注") date = models.DateTimeField(auto_now_add=True) def __str__(self): return self.qq class Meta: verbose_name ="客户表" verbose_name_plural ="客户表"
admin.site.register(models.Customer)
模型字段参考文档
http://python.usyiyi.cn/documents/django_182/ref/models/fields.html#manytomany-arguments
字段类型
name = models.CharField(max_length=32) #字符串 #限定字段的长度 memo = models.TextField(blank=True,null=True) #大文本字段 date = models.DateField(auto_now_add=True) #时间字段 #自动填充选项 start_date = models.DateField(verbose_name="开班日期") amount = models.PositiveIntegerField(verbose_name="数额",default=500) #正整数字段 #0到2147483647的值 has_homework = models.BooleanField(default=True) # true/false 字段 #可迭代的结构,列表或是元组 #显示选择框 status_choices = ((0,'已报名'), (1,'未报名'), ) status = models.SmallIntegerField(choices=status_choices,default=1) #正整数字段 #从0 到 32767 这个区间
关联字段
course = models.ForeignKey("Course",verbose_name="所报课程") #多对一关系 #自动创建数据库索引 #Django 会在字段名上添加"_id" 来创建数据库中的列名 roles = models.ManyToManyField("Role",blank=True,null=True) #多对多关联 #与ForeignKey 的工作方式完全一样 user = models.OneToOneField(User) #一对一关联关系 #ForeignKey 设置了unique=True
字段选项
name = models.CharField(max_length=32,blank=True,null=True) #该字段允许为空白 #空值存储为NULL (成对出现) name = models.CharField(unique=True,max_length=32,primary_key=True) #表中必须有唯一值 #模型的主键字段 attendance = models.SmallIntegerField(choices=attendance_choices,default=0) #字段的默认值0 contract_approved = models.BooleanField(default=False,verbose_name="合同已审核") #一个字段的可读性更高的名称
__str__() (python3) 和 __unicode__() (python2.x)
方法定义了当object调用str()时应该返回的值
它以unicode方式返回任何对象的陈述。Python和Django需要输出字符串陈述时使用。
例如在交互式控制台或管理后台显示的输出陈述。
def __str__(self): return "%s %s" %(self.customer,self.enrolled_class)
自定义字段类型 Meta 选项
class Meta: unique_together = ('branch','course','semester') #用来设置的不重复的字段组合,必须唯一(将两个字段做联合唯一) verbose_name = "班级" #指明一个易于理解和表述的对象名称,单数形式 verbose_name_plural = "班级" #对象的复数表述名: