Django中修改欄位時注意的乙個問題

2021-08-15 17:51:13 字數 1004 閱讀 5500

問題:

django 1.7.8

表 users 和 tenant 做了多對多關聯。django 會自動建立乙個表 users_tenants(user_id與tenant_id的對應)

class users(models.model):

tenants = models.manytomanyfield(tenant)

在執行 user.tenants.add(tenant)時,報下面的問題:

error: (1452, 'cannot add or update a child row: a foreign key constraint fails (`iaasms`.`users_tenants`, constraint `users_tenants_users_id_3d9ac202e9485f18_fk_users_user_id` foreign key (`users_id`) references `users` (`user_id`))')

a:雖然在setting -> databases -> default 中關閉外來鍵檢查:

'options':

可以消除這個錯誤,但是關聯查詢 user.tenants.all() 的結果是空的。

根本原因:

在第一次 migrate後,users_tenants的字段 tenant_id的長度來自 表 tenant中的 tenant_id的長度。

但是,我後來增加了 tenant中的 tenant_id的長度,在 migrate後,users_tenants中的 tenant_id的長度沒有變化。

所以,在執行 user.tenants.add(tenant)時,users_tenants的 tenant_id的長度不夠。

在setting -> databases -> default 中關閉外來鍵檢查後,雖然不報錯了,但users_tenants的tenant_id儲存的值不全(實際的資料大於字段長度),所以關聯查詢的結果是空的。

解決:刪除migration的檔案和資料庫,重新建立資料庫。

django中的字段型別

from charfield.max length 字元的最大長度,django會根據這個引數在資料庫層和校驗層限制該字段所允許的最大字元數。auto now 當物件被儲存時,自動將該字段的值設定為當前時間.通常用於表示 last modified 時間戳 auto now add 當物件首次被建立...

django使用sitemap框架時修改預設網域名稱

按照django的sitemaps框架指導 生成sitemap.xml的時候 url loc loc lastmod 2016 03 20 lastmod changefreq weekly changefreq priority 0.5priority url 預設的loc網域名稱是example...

Django中欄位選項的使用

所有的模型欄位都可以接收一定數量的引數,比如charfield至少需要乙個max length引數。下面的這些引數是所有欄位都可以使用的,並且是可選的。說明 該值為true時,django在資料庫可以null儲存空值。預設值為false。對於儲存字串型別資料的字段,請盡量避免將此引數設為true,那...