我有一个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)
答案 0 :(得分:0)
在用于与模型Mapping
和Keywords
相关的模型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列。