创建模型对象时如何分配外键相关字段

时间:2019-11-06 19:09:56

标签: python django django-models

我有一个模型联赛,其字段之一是国家/地区代码,它是另一个模型国家/地区的外键

class League(models.Model):                           
    league = models.IntegerField(primary_key=True)                                                   
    league_name = models.CharField(max_length=200)                                                   
    country_code = models.ForeignKey("Country",null=True, on_delete=models.SET_NULL)                 

class Country(models.Model):                          
    country = models.CharField(max_length=60)
    code = models.CharField(max_length=15,null=True)
    flag = models.URLField(null=True)               
    lastModified = models.DateTimeField(auto_now=True)

当我尝试创建联赛对象

data_json = leagues_json["api"]["leagues"]      
for item in data_json:                                 
    league_id = item["league_id"]                   
    league_name = item["name"]                      
    country = item["country"]                                              
    b = League.objects.create(league = league_id,league_name = league_name,country_code = country)

我收到错误消息:

ValueError: Cannot assign "'World'": "League.country_code" must be a "Country" instance.

就像我理解的那样,发生错误是因为在创建对象时,我没有分配给country_code字段固有的Country对象。

如何做到?

1 个答案:

答案 0 :(得分:0)

您可以尝试先获取Country对象,然后使用它来创建League

也许是这样的(假设item["country"]拥有国家代码):

for item in data_json:                                 
    country = Country.objects.get(code=item["country"])
    b = League.objects.create(
        league=item["league_id"],
        league_name=item["name"],
        country_code=country)

请注意此代码:

  • 将在每个循环中进行数据库查找;可以对它进行优化以减少查询。
  • 如果该国家不存在,则会引发错误;您可以添加一个try-except块来处理这些情况。