Python django Foreign key IntegrityError:myapp_model2.name_id不能为NULL

Python django Foreign key IntegrityError:myapp_model2.name_id不能为NULL,python,django,python-2.7,django-views,Python,Django,Python 2.7,Django Views,我已经通过django管理页面在Model1中填写了3个用户名密码示例 在我看来,这张清单是 class Model1(models.Model): username = models.CharField(max_length=100,null=False,blank=False,unique=True) password = models.CharField(max_length=100,null=False,blank=False) class Model2(model

我已经通过django管理页面在Model1中填写了3个用户名密码示例

在我看来,这张清单是

class Model1(models.Model):
     username = models.CharField(max_length=100,null=False,blank=False,unique=True)
     password = models.CharField(max_length=100,null=False,blank=False)

class Model2(models.Model):
     name = models.ForeignKey(Model1)
     unique_str = models.CharField(max_length=50,null=False,blank=False,unique=True)
     city = models.CharField(max_length=100,null=False,blank=False)
但回溯显示我在线路上有错误
a,b=Model2.objects.get\u或\u create(unique\u str='f3h6y67')

IntegrityError:myapp\u model2.name\u id不能为空


我做错了什么吗?

您必须在模型2中的外键字段“name”中设置
null=True
,以允许在没有值的情况下实例化其模型,否则,当您在没有定义名称的情况下调用get\u或\u create时,它会引发IntegrityError,因为在创建对象时它没有名称(user)已定义

userlist = Model1.objects.all()
#print userlist[0].username, userlist[0].password

for user in userlist:
     a,b = Model2.objects.get_or_create(unique_str='f3h6y67')
     a.name = user
     a.city = "acity"
     a.save()
您也可以在调用get_或_create时直接设置名称:

class Model2(models.Model):
    name = models.ForeignKey(Model1, null=True)
根据您计划创建这些对象的方式,您可能还需要添加
blank=True
,以便在表单验证中允许空值


有关此选项和其他您可能感兴趣的字段/模型选项的更多信息,请参阅:)


您是否仍在设置
a.name=user
,然后设置
a.save()
?它确实存在:)尽管据我所知,您正在尝试创建一个“更轻”的用户模型版本,不是吗?你应该考虑直接使用它。
a,b = Model2.objects.get_or_create(unique_str='f3h6y67', name=user)