Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django和Postgres插入多对多表不起作用_Django_Postgresql - Fatal编程技术网

Django和Postgres插入多对多表不起作用

Django和Postgres插入多对多表不起作用,django,postgresql,Django,Postgresql,我正在使用python和psycopg2获取一些数据并将它们插入到我的数据库中 我已经在Django models.py中创建了movies和actors表,在我的movies表中,movies和actors表之间存在多对多关系 下面是my models.py: class Movie(models.Model): name = models.CharField(max_length=55) summary = models.TextField(max_length=1024)

我正在使用python和psycopg2获取一些数据并将它们插入到我的数据库中

我已经在Django models.py中创建了moviesactors表,在我的movies表中,movies和actors表之间存在多对多关系

下面是my models.py:

class Movie(models.Model):
    name = models.CharField(max_length=55)
    summary = models.TextField(max_length=1024)
    actor = models.ManyToManyField(Actor, blank=True)
当我从Django admin创建一部电影时,我选择电影中包括哪些演员,一切正常,该电影的所有相关演员都会出现在我的网站上

但问题是,当我尝试将刮取的数据插入Django项目文件夹之外的数据库时,相关参与者不会显示在我的网站上,因为很明显,我没有设置他们之间的多对多关系

我曾尝试使用SQL命令创建一个连接表,该命令获取电影id和演员id并将它们链接在一起,但我不知道该如何告诉Django使用该表并显示每部电影的相关演员

这是我用来插入数据库的SQL代码:

INSERT INTO movies(name, summary)
VALUES ('movie name', 'sth')
以及要插入到表中的代码:

INSERT INTO actors(name, bio)
VALUES ('actorname', 'sth')
演员和电影表都有自动生成的id,我使用下面的代码将它们插入到连接表中:

INSERT INTO movie_actors (actor_id, movie_id) 
VALUES (
(SELECT actor_id from actors where name='actor name'),
(SELECT movie_id from movie where name='movie name')
)
我做得对吗


如果有人能帮我,我将不胜感激。

Django会自动为许多关系创建一个表。从文档:

曼尼托曼尼菲尔德 Django将自动生成一个表来管理多对多关系。但是,如果要手动指定中间表,可以使用through选项指定表示要使用的中间表的Django模型

此选项最常见的用途是当您希望将额外数据与多对多关系关联时

因此,您必须找到django已经创建的表的名称。
其次,我建议您使用django的ORM而不是原始查询,这样您就不会再有此类问题了。

django会自动为M2M关系创建一个直通表,如果需要,您可以指定自定义直通表。就你的情况而言,我认为没有必要通过表格定制

我使用Django ORM而不是编写原始查询

插入电影(名称、摘要)值('movie name','sth')

您可以使用以下ORM查询代替原始查询:

movie=movie.objects.create(name=“movie name”,summary=“movie sammuary”)

这将在电影表中创建一个电影条目

在“创建用户条目”旁边,可以使用以下查询:

actor=actor.objects.create(name=“actor name”,bio=“actor bio”)

现在您在两个表中都创建了条目,接下来您可以建立不动产,为此您必须使用以下查询:

movie.actor.add(actor)

如果要同时添加多个参与者,请创建多个参与者对象并使用以下查询:

movie.actor.add(actor1、actor2、actor2)


有关更多详细信息,您可以查看

Hi,请添加一个最小的可复制示例。更多信息:Hi,我刚刚更新了我的问题@EPaulThanks以获得答案,那么我应该在哪里查找此表@伊帕尔