2017-08-31 70 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