向具有数据和奇怪列名的三个表添加关系

时间:2019-02-23 01:26:34

标签: python django postgresql

我有一个Postgres数据库,其中包含3个表以及Django中的数据及其模型。我无法控制这些表格的填充方式。但是我需要为其添加关系。

对我来说,在MsSQL,Oracle或MySql中这不是问题。但是我在这里感到困惑。

class Keywords(models.Model):
     id = models.AutoField(primary_key=True)
     keyword = models.CharField(unique=True, max_length=250)

class Mapping(models.Model):
     id = models.AutoField(primary_key=True)
     keyword = models.CharField(max_length=250)
     videoid = models.CharField(max_length=50)

class Video(models.Model):
     videoid = models.CharField(primary_key=True, max_length=50)

3 个答案:

答案 0 :(得分:0)

在用于与模型MappingKeywords相关的模型Video中,您可以进行如下更改:      class Mapping(models.Model):

      id = models.AutoField(primary_key=True)  
      keyword = models.ForeignKey(Keywords, on_delete=models.CASCADE)
      videoid = models.ForeignKey(Video, on_delete=models.CASCADE)

您也不需要为模型定义id,因为Django本身会创建一个id字段,该字段是自动生成的并且是主键。

答案 1 :(得分:0)

使用inspectdb可以从数据库表中生成模型。

NotificationWorker

关系

$ ./manage.py inspectdb table1 table2 table3 >> models.py

然后您可以删除Mapping模型,此关系的表由Django生成。

如果要保留已经相关的实例的数据,请对具有映射模型的ManyToManyField使用 class Video(models.Model): #... keywords = models.ManyToManyField(Keywords) 键参数。

答案 2 :(得分:0)

最后,我找到了解决方法:

dockerbridge123

要将关系添加到具有奇怪列名的现有表并键入,最好使用 to_field db_column 。在这种情况下,Django将不会尝试创建用于关系的标准id列。