django自定義第三張表

2021-08-18 13:05:07 字數 2695 閱讀 7292

當我們遇到多對多關係時,我們就立馬會想到建立第三張表來維護多對多的關係,比如,角色使用者許可權等

我們都知道對於django中manytomany欄位,django會自動為我們建立第三張表,預設情況下,django會如何給我們生成第三張表呢?

請看**:

classuser(models.model):

name = models.charfield(max_length=20)

classrole(models.model):

name = models.charfield(max_length=20)

user = models.manytomanyfield(user)

我們執行makemigrations和migrate之後,資料庫中會出現三張表:

一般情況下這種情況能滿足我們的要求,但是有時候我們需要在第三張表中新增一些其他字段,例如create_time,status等,這個時候該如何建立呢?

django為我們提供了through引數,用於指定中間模型,如下:

classuser(models.model):

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)

此時會生成djangostudy_userrole第三張表:

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...