gpt4 book ai didi

python - Django - get_or_create() 与 auto_now=True

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:00 25 4
gpt4 key购买 nike

我正在使用 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'])

我遇到的问题是,每当我运行脚本时,条目都会重复,因为编辑字段发生了变化,但我放置编辑字段的目的是了解电影何时被编辑,即:其他一些字段已更改。

如何避免重复,同时保留编辑字段,以防发生真正的更改?

最佳答案

but the purpose I put the edit field is to know when exactly a movie got edited, ie: some other field got changed.

这可能意味着您使用了错误的函数。您应该使用update_or_create相反。

A convenience method for updating an object with the given kwargs, creating a new one if necessary. The defaults is a dictionary of (field, value) pairs used to update the object.

这与 get_or_create 不同,后者在对象不存在时创建该对象,或者在对象存在时简单地获取该对象。 update_or_create 是实际更新的那个。

但是,更改为此方法并不能解决此问题:

How can I avoid the duplicates, but also keep the edit field in case some real change happened?

创建重复项是因为您的任何字段都没有唯一索引。 get_or_createupdate_or_create 都要求您有一个唯一的字段。似乎需要进行以下更改:

class Movie(models.Model):
title = models.CharField(max_length=511)
tmdb_id = models.IntegerField(unique=True)

关于python - Django - get_or_create() 与 auto_now=True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39781666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com