我正在尝试通过不断的实时更新保存API中的数据。因此,来自API的数据将始终容纳我的数据库中的现有数据集。所以我创建了一个unique_together来防止重复。
模型看起来像:
class Autodamb(models.Model, Activity):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='highlight', null=True)
title = models.CharField(max_length=300)
url = models.URLField(null=True)
embed_donotuse = models.CharField(max_length=1000)
date = models.CharField(max_length=300)
thumbnail = models.URLField()
home_team_name = models.CharField(max_length=100)
away_team_name = models.CharField(max_length=100)
class Meta:
unique_together = ["title", "date"]
视图.py:
def save_damb_video(request):
r = requests.get('https://www.brainxo.com/com-api/v1/?apid=xxxxxxxxxxx')
# data = json.loads(r)
data = r.json()
for x in data:
title = x["title"]
embed_donotuse = x["embed"]
url = x["url"]
date = x["date"]
thumbnail = x["thumbnail"]
home_team_name = x["side1"]["name"]
away_team_name = x["side2"]["name"]
user = request.user
damb_data = Autodamb.objects.create(title=title, embed_donotuse=embed_donotuse, url=url, date=date, thumbnail=thumbnail, home_team_name=home_team_name, away_team_name=away_team_name, user=user)
damb_data.save()
return HttpResponse("DAMP API data successfully saved")
问题是,由于一些数据已经存在,整个过程将以unique_together失败。有什么想法吗?如何在保持唯一约束的同时迭代并只保存不存在的数据?
这将忽略已经存在标题和日期组合的行,只插入其余行。
objects = []
for x in data:
...
damb_data = Autodamb(
title=title,
embed_donotuse=embed_donotuse,
url=url, date=date,
thumbnail=thumbnail,
home_team_name=home_team_name,
away_team_name=away_team_name,
user=user
)
objects.append(damb_data)
bulk_create(objects, ignore_conflicts=True)
PS。如果您正在Django中构建API,我建议您查看Django Rest Framework。它有针对这类事情的序列化程序。