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)