Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在创建模型对象时指定外键相关字段_Python_Django_Django Models - Fatal编程技术网

Python 如何在创建模型对象时指定外键相关字段

Python 如何在创建模型对象时指定外键相关字段,python,django,django-models,Python,Django,Django Models,我有一个模特联盟的领域国家/地区代码作为外键与另一个模特国家/地区关联 class League(models.Model): league = models.IntegerField(primary_key=True) league_name = models.CharField(max_length=200)

我有一个模特联盟的领域国家/地区代码作为外键与另一个模特国家/地区关联

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\u code
字段正确地分配给
country
对象


如何操作?

您可以先尝试获取
国家
对象,然后使用它创建
联盟

可能是这样的(假设
项[“国家”]
包含国家代码):

请注意,此代码:

  • 将在每个循环中执行数据库查找;这可能会被优化以减少查询
  • 如果国家/地区不存在,则引发错误;可以添加try-except块来处理这些情况

您可以先尝试获取
国家
对象,然后使用它创建
联盟

可能是这样的(假设
项[“国家”]
包含国家代码):

请注意,此代码:

  • 将在每个循环中执行数据库查找;这可能会被优化以减少查询
  • 如果国家/地区不存在,则引发错误;可以添加try-except块来处理这些情况

非常感谢。不幸的是,我没有权利将你的答案标记为“正确”(非常感谢。不幸的是,我没有权利将你的答案标记为“正确”)((
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)