我正在使用Django,我遇到了使用Django模型的Python脚本的问题 我正在使用的脚本从api获取数据并将其加载到我的数据库中。
我的模特:
class Movie(models.Model):
title = models.CharField(max_length=511)
tmdb_id = models.IntegerField(null=True, blank=True)
release = models.DateField(null=True, blank=True)
poster = models.TextField(max_length=500, null=True)
runtime = models.IntegerField(null=True, blank=True)
description = models.TextField(null=True, blank=True)
edit = models.DateTimeField(auto_now=True, null=True, blank=True)
backdrop = models.TextField(max_length=500, null=True, blank=True)
popularity = models.TextField(null=True, blank=True)
脚本:
movies = tmdb.Movies().upcoming()
results = movies['results']
ids = []
for movie in results:
data, created = Movie.objects.get_or_create(title=movie['title'],
tmdb_id=movie['id'],
release=movie['release_date'],
description=movie['overview'],
backdrop=movie['backdrop_path'],
poster=movie['poster_path'],
popularity=movie['popularity'])
我遇到的问题是每当我运行脚本时,条目都会重复,因为编辑字段是更改的,但我放置编辑字段的目的是知道电影何时被编辑,即:其他一些领域变了。
如何避免重复,还要保留编辑字段,以防发生真正的变化?
答案 0 :(得分:1)
但我设置编辑字段的目的是知道什么时候准确的电影 得到了编辑,即:其他一些领域发生了变化。
这可能意味着您使用了错误的功能。你应该使用update_or_create istead。
使用给定的kwargs更新对象的便捷方法, 必要时创建一个新的。默认值是字典 (字段,值)对用于更新对象。
这与get_or_create不同,get_or_create会在不存在的情况下创建一个对象,或者只在它存在时才提取它。 update_or_create是进行实际更新的那个。
但是,改用这种方法并不能解决这个问题:
如何避免重复,同时保留编辑字段以防万一 发生了一些真正的变化?
创建重复项是因为您的任何字段都没有唯一索引。 get_or_create
和update_or_create
都要求您拥有唯一字段。似乎有以下变化:
class Movie(models.Model):
title = models.CharField(max_length=511)
tmdb_id = models.IntegerField(unique=True)