當我們遇到多對多關係時,我們就立馬會想到建立第三張表來維護多對多的關係,比如,角色使用者許可權等
我們都知道對於django中manytomany欄位,django會自動為我們建立第三張表,預設情況下,django會如何給我們生成第三張表呢?
請看**:
classuser(models.model):我們執行makemigrations和migrate之後,資料庫中會出現三張表:name = models.charfield(max_length=20)
classrole(models.model):
name = models.charfield(max_length=20)
user = models.manytomanyfield(user)
一般情況下這種情況能滿足我們的要求,但是有時候我們需要在第三張表中新增一些其他字段,例如create_time,status等,這個時候該如何建立呢?
django為我們提供了through引數,用於指定中間模型,如下:
classuser(models.model):此時會生成djangostudy_userrole第三張表:name = models.charfield(max_length=20)
classrole(models.model):
name = models.charfield(max_length=20)
user = models.manytomanyfield(user, through="userrole")
classuserrole(models.model):
user = models.foreignkey(user, on_delete=models.cascade)
role = models.foreignkey(role, on_delete=models.cascade)
create_time = models.datefield(auto_now_add=true)
create table `djangostudy_userrole` (
`id` int(11) not null auto_increment,
`create_time` date not null,
`role_id` int(11) not null,
`user_id` int(11) not null,
primary key (`id`),
key `djangostudy_userrole_role_id_f907649a_fk_djangostudy_role_id` (`role_id`),
key `djangostudy_userrole_user_id_87ea858c_fk_djangostudy_user_id` (`user_id`),
constraint `djangostudy_userrole_role_id_f907649a_fk_djangostudy_role_id` foreign key (`role_id`) references `djangostudy_role` (`id`),
constraint `djangostudy_userrole_user_id_87ea858c_fk_djangostudy_user_id` foreign key (`user_id`) references `djangostudy_user` (`id`)
) engine=innodb default charset=utf8;
手動建立第三張表
1 多對多的關係,三種寫法 2 手動建立第三張表 不建立關聯關係 3class book models.model 4 缺省會建立id 5 name models.charfield max length 32 6class author models.model 7 name models.cha...
對第三張卡片中的功能實現要點和注意的細節!
1 li ng repeat bid list in bid lists style height 42px ng tap bid sign up detail bid list.name 2 header create page id bid 競價報名 span 人 解析 1 create pag...
django自定義使用者表
django中已經給我生成預設的user表,其中的字段已經可以滿足我們的日常需求。但有時候,我們需要更多的字段,我們就可以自定義。來替換django自帶的user表。models.py from django.contrib.auth.models import abstractuser class...