从现有的sqlite db创建django模型

时间:2015-06-03 10:58:53

标签: django sqlite

我用于创建orm并让django负责创建表。但在我参与的项目中,我必须创建一个简单的CRUD应用程序作为现有数据库的前端。通过手动创建表来创建数据库。所以我有两个表Table1和Table2,它们通过Tables12有很多关系。 Tables12看起来像django使用ManyToManyField正常创建的表,因此它有两个字段,两个模型的id。因此在使用django的inspectdb之后,django根据SQLite数据库成功创建了模型。像Tables12这样的多对多表创建如下(如上所述):

class Tables12(models.Model):
    table1 = models.ForeignKey(Table1)
    table2 = models.ForeignKey(Table2)

    class Meta:
        managed = False
        db_table = "Tables12"
        unique_together = (("table1_id", "table2_id"),)

尝试以下操作会给我一个错误:

>> table2 = Table2.objects.get(pk=1)
>>tables12 = Tables12.objects.filter(table2=table2)
>>tables12
OperationalError: no such column: Tables12.id

我猜测Django的orm期望在每个创建的模型中都有一个id字段。我该如何绕过这种行为?有没有办法编辑表格,因为它们看起来更像django的orm,但表现为现有的db表格?像:

class Table1(models.Model):
    #pre exsiting fields
    table2 = models.ManyToManyField(Table2)

class Table2(models.Model):
    #pre existing fields
    table1 = models.ManyToManyField(Table1)

但不破坏数据库记录,也不从开始创建表。

1 个答案:

答案 0 :(得分:0)

您可以删除Tables12模型,并为db_table指定ManyToManyField参数:

class Table1(models.Model):
    tables2 = models.ManyToManyField(Table2, db_table='Tables12')

您仍然无法直接查询Tables12模型(它仍然存在并且有一个id字段),但这样您就可以使用JOIN的Django生成对于ManyToManyField

table1 = Table1.objects.get(pk=1)
tables2 = table1.tables2.all()

这仍然不允许您使用Django写入连接表,但它允许您使用其中的数据。如果可能的话,我强烈建议添加主键。