Django和Postgres插入多对多表不起作用
我正在使用python和psycopg2获取一些数据并将它们插入到我的数据库中 我已经在Django models.py中创建了movies和actors表,在我的movies表中,movies和actors表之间存在多对多关系 下面是my models.py: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)
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以获得答案,那么我应该在哪里查找此表@伊帕尔