如何在 views.py 中 API 的 .save() 数据时设置外键字段

How to set a ForeignKey field while .save() data from API in views.py

我正在从 api 中提取数据并尝试将其从视图中直接保存到我的数据库中,尽管我一直收到错误消息,因为我必须选择 ForeignKey 字段。

如何在 .save() 函数中执行此操作?

    views.py

    all_teams = {}
    teams = Teams()
    for team in teams:
        team_list = Team(
            name=team.name,
            abbreviation=team.abbreviation,
            league= <--- ForiegnKey Field
        )
        team_list.save()
    models.py
       
    class League(models.Model):
    LEAGUES = (
        ('MLB', ('MLB')),
        ('NBA', ('NBA')),
        ('NCAAB', ('NCAAB')),
        ('NFL', ('NFL')),
    )

    name = models.CharField(
        max_length=10, choices=LEAGUES, null=False, blank=False)

    def __str__(self):
        return self.name


    class Team(models.Model):
    name = models.CharField(max_length=100, null=False, blank=False)
    abbreviation = models.CharField(max_length=10, null=False, 
    blank=False)
    league = models.ForeignKey(
        'League', null=False, blank=False, 
         on_delete=models.CASCADE)

    def __str__(self):
        return self.name

更新答案: 您已经为联盟创建了模型,但都没有创建任何对象。通俗地说,你有蓝图,但还没有建造。

为了创建联赛对象,您需要在创建球队的代码上方的 views.py 中添加以下内容。

mlb = League.objects.create(name='MLB')

已更新Views.py

mlb = League.objects.create(name='MLB')
all_teams = {}
    teams = Teams()
    for team in teams:
        team_list = Team(
            name=team.name,
            abbreviation=team.abbreviation,
            league=mlb
        )
        team_list.save()

此外,请在您的 models.py 中进行以下更改,删除 League 周围的引号。

您的代码:

class Team(models.Model):
    name = models.CharField(max_length=100, null=False, blank=False)
    abbreviation = models.CharField(max_length=10, null=False, 
    blank=False)
    league = models.ForeignKey(
        'League', null=False, blank=False, 
         on_delete=models.CASCADE)

更新版本:

class Team(models.Model):
    name = models.CharField(max_length=100, null=False, blank=False)
    abbreviation = models.CharField(max_length=10, null=False, 
    blank=False)
    league = models.ForeignKey(
        League, null=False, blank=False, 
         on_delete=models.CASCADE)

原答案:

Please share your code for models.py and views.py entirely so that I can help you better. Making a few assumptions I have answered your question below.

You first need to create a new object for the FOREIGN KEY, in you case a new league object. python premier_league = League.objects.create(name='Permier')

Then you can use this when creating a new team

    name=team.name,
    abbreviation=team.abbreviation,
    league=permier_league ) team_list.save() ```