2017-08-31 67 views
0

我有以下型號多對多過濾器不工作的Django

class A(models.Model) 
    a_id = models.IntegerField(primary_key=True) 
    created_by_id = models.ManyToManyField(User,db_column="user_id", related_name="created_by_id") 
    last_updated_by = models.ManyToManyField(User, db_column="user_id", related_name="last_updated_by",) 
    resolved_by_id = models.ManyToManyField(User, db_column="user_id", related_name='resolved_by_id') 

class B(models.Model): 
    .... 

class C(models.Model): 
    .... 

class User(models.Model): 
    user_id = models.IntegerField(primary_key=True) 
    user_name = models.CharField(max_lenght=30) 

    field_1 = models.ForeignKey(B) 
    field_2 = models.ForeignKey(C) 

當我申請的class A我得到的SQL表下面的錯誤找不到序列化,我使用OracleDB的

ORA-00942: table or view does not exist 

('SELECT "USER"."USER_ID", "USER"."USER_NAME" FROM "USER" INNER ' 
'JOIN "A_CREATED_BY_ID" ON ("USER"."USER_ID" = ' 
'"A_CREATED_BY_ID"."USERMST") WHERE ' 
'"A_CREATED_BY_ID"."A_ID" = %s') 

我查看了Django文檔,ManytoMany仍然無法弄清楚問題所在。

更新:這是一箇舊的數據庫,我們沒有使用遷移

回答

1

由於這是一個傳統的數據庫,Django的沒有創建表,因此不知道所使用的中間表ManyToManyFields。你必須讓Django知道哪些表應該用於連接。 例如:

created_by_id = models.ManyToManyField(
    User, 
    through="ModelName" # the model name 
    db_table="table_name" # the table name in the DB for the join 
    db_column="user_id", # this one you could drop 
    related_name="created_by_id" 
) 

你還是指定然後在連接A級和用戶模型中db_column。你

還可以添加class Meta到模型:

class Meta: 
    managed = False 

這使得它明顯爲大家誰在閱讀代碼,數據庫不被Django的管理。

編輯: 這是關於選項through的官方文檔的link