【发布时间】:2020-07-15 18:53:10
【问题描述】:
我正在尝试使用来自外部 CSV 文件的数据填充我的 Django SQL 数据库,但是当我运行填充文件时,父 ManyToManyField 模型(电影)不会采用我从子(演员)提供的查询对象模型,因为(我认为)它是一个列表。是否可以使用 get_or_create 调用将列表解析为模型?如果没有,我该如何解决这个问题?
我的 models.py 文件如下所示:
class Actor(models.Model):
actor_id = models.CharField(max_length=20, unique=True)
name = models.CharField(max_length=40)
class Film(models.Model):
film_id = models.CharField(max_length=20, unique=True)
title = models.CharField(max_length=60)
actors = models.ManyToManyField(Actor)
我的 populate.py 文件如下所示:
import pandas
df = read_csv('csv_file.csv')
def populate_film():
for index, row in in df.iterrows():
film_csv_id = str(row['IMDb ID'])
film_name = str(row['Film'])
list_of_actors = row['Actors']
#The CSV actors column returns a the list of actor_ids which I query against the Actor model
#I then put these queries into a list for the get_or_create step
actor_query_list = []
for actor_csv_id in list_of_actors:
actor_query = Actor.objects.get(actor_id = actor_csv_id)
actor_query_list.append(actor_query.id)
film = Film.objects.get_or_create(film_id = film_csv_id, title = film_name, actors = actor_query_list)
我收到的错误信息是:
Field 'id' expected a number but got [xxxx, xxxx].
谢谢!
【问题讨论】:
-
我的第一直觉是错误发生在这段代码的末尾,因为
get_or_create()不返回 Film 对象,它返回一个 2 元组,错误来自于尝试以后再用。
标签: python sql django pandas csv