2012-09-19 30 views
1

我有两种模式,比如说A和B.外键的概念

A是一对一的auth_user,而B通过外键与A相关。

现在,当我尝试喂养模型B中的数据时,它给了我一个错误A_id'不能为空。所以有人可以告诉我如何将数据提供给外键或者它可以默认获得模型A的ID,如果是的话,那么如何?

注:

我用不同的形式,每种型号,是指我提交在模型中的数据,并取得成功后,请参阅我的个人资料页,然后在那里我点击链接,以填补第二种模式的细节,因此第二种形式发挥作用。 所以在这里我不知道外键是如何得到模型A的ID。

+0

如果您无法将数据添加到模型B而没有在模型A上的相应记录,但是您想要,那么您的设计就不好。否则请按照llian的答案... – shan

+0

我在模型A中有数据,如果我完成模型的详细信息,那么只有我可以看到该配置文件,因此链接 – Inforian

+0

如果是这样,您可以查询模型A中最后插入的行ID。是你正在使用的语言? – shan

回答

0

当您创建B对象时,需要提供对A对象的引用。

你说你正在使用的形式创建B对象,所以你可能需要沿着线的东西...

b_instance = new_b_form.save(commit=False) 
b_instance.a = A.objects.get(something="whatever") # You'll know how to find the A object you want related. 
b_instance.save() 

设置会自动设置A_ID被保存在数据库中。

或者,您可以更改表单,以便用户可以选择A对象。

+0

我要的代码在我看来,这些线路 – Inforian

1

如果你想保存它,你应该允许模型B FK字段为空(null = True,空白=真)参考模型A即FK为空。 否则,您将不得不使用A对象来提供B对象,然后保存它。

+0

我可以通过这种方式得到A的对象X = A.objects.all() 所以我应该写什么当我提交数据到B中,以便B的外键得到A的主键 – Inforian

+0

简而言之: OBJ_A = A.objects.get()#提防获得可以抛出异常\ n B.fk_to_a_field = OBJ_A \ n B.save() –