使用 django 使用外键填充 sql table

Populating sql table with foreign keys using django

所以我在使用 Django 时将数据插入我的 sql 数据库时遇到了一些问题。设置表格以及通过管理页面填充它们工作得很好,但我有一个 scraper 功能,每 24 小时运行一次应该插入数据。

from datetime import datetime
from .faceScraper import faceScraper as fc


def Dbpopulator():

    from ..models import Event

    [title_list, time_list, location_list, nation_list] = fc()
    print("scraped")
    for i in range(len(title_list)):
        
        e = Event()
        
        e.title = title_list[i]
        e.starttime = time_list[i][0]
        e.endtime = time_list[i][1]
        e.location = location_list[i]
        
        instance = e.save(commit=False)
        
        instance.nation = nation_list[i]
       
        instance.save()

当我尝试设置以下模型文件中的外键国家时出现问题。

from django.db import models

# Create your models here.


class Nation(models.Model):
    name = models.CharField(max_length=80, primary_key=True)

    description = models.TextField()

    Facebook = models.CharField(max_length=80, null=True, blank=True)

    def __str__(self):
        return self.name


class Event(models.Model):
    title = models.CharField(max_length=80, unique=True)

    starttime = models.DateTimeField(null=True, blank=True)

    endtime = models.DateTimeField(null=True, blank=True)

    nation = models.ForeignKey(
        Nation, on_delete=models.CASCADE, default=None, null=True, blank=True)

    location = models.CharField(max_length=80, null=True, blank=True)

    def __str__(self):
        return self.title

我尝试了很多不同的方法,主要是设置 e 并像往常一样保存,也就是删除所有实例并 commit=false。

e.nation = nation_list[i]
e.save()

但它只是行不通,我也非常确定数据库中已经填充了国家,其中包含与我尝试插入的名称相对应的名称,正如我在管理页面上看到的那样。 感谢所有帮助!

您需要先获取 Nation 实例。如果 nation-list 包含国家的名字,你可以这样得到它们:

e = Event()
...
e.nation = Nation.objects.get(name=nation_list[i])
e.save()

如果您不能 100% 确定所提供的名称与某个国家匹配,您可以使用 .filter(...).first() 而不是 .get(...) 来避免任何崩溃。