为了便于说明,只有两个简单的模型:
class PrimaryModel(models.Model):
foo = models.CharField(max_length=50, unique=True)
class SecondaryModel(models.Model):
bar = models.ForeignKey(PrimaryModel)
现在尝试在shell中创建实例:
>>> import testapp.models
>>> a=testapp.models.PrimaryModel(foo="Test1")
>>> a.save()
>>> b=testapp.models.SecondaryModel(bar=1)
......当然还有错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/pkaramol/Workspace/django-env/lib/python3.3/site-packages/django/db/models/base.py", line 405, in __init__
setattr(self, field.name, rel_obj)
File "/home/pkaramol/Workspace/django-env/lib/python3.3/site-packages/django/db/models/fields/related.py", line 337, in __set__
self.field.name, self.field.rel.to._meta.object_name))
ValueError: Cannot assign "1": "SecondaryModel.bar" must be a "PrimaryModel" instance.
问题是为什么我们不能使用PrimaryModel的id(如上面的错误示例),我们必须使用实例? 还尝试使用
中的to_field
字段
class SecondaryModel(models.Model):
bar = models.ForeignKey(PrimaryModel, to_field='foo')
但这并没有改变这种情况。
答案 0 :(得分:3)
如果你想使用PrimaryModel的id,你应该这样做:
b=testapp.models.SecondaryModel(bar_id=1)
答案 1 :(得分:2)
这个怎么样。
>>> import testapp.models
>>> a=testapp.models.PrimaryModel(foo="Test1")
>>> a.save()
>>> b=testapp.models.SecondaryModel()
>>> b.bar_id = 1
>>> b.save()
实际上,只需将_id添加到外键名称即可访问fk id。只需创建模型,然后手动设置fk_id,然后保存