许多过滤器不工作

2024-04-26 03:43:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下型号

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 table not found中得到以下错误,我使用的是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文档,但仍然无法找出问题所在。你知道吗

更新:这是在旧数据库上,我们不使用迁移


Tags: nameiddbbymodelmodelscolumnclass
1条回答
网友
1楼 · 发布于 2024-04-26 03:43:58

由于这是一个遗留数据库,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和类User的模型中指定db_column。你知道吗

您还可以将class Meta添加到您的模型中:

class Meta:
    managed = False

这让每个阅读代码的人都清楚地看到,数据库不是由Django管理的。你知道吗

编辑: 下面是官方文档中关于选项throughlink。你知道吗

相关问题 更多 >

    热门问题