如何在 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() ```
我正在从 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() ```