在Django當創建新模型實例爲了便於說明,只有兩個普通的機型型號爲ForeignKey的的(主鍵):使用ID通過shell
class PrimaryModel(models.Model):
foo = models.CharField(max_length=50, unique=True)
class SecondaryModel(models.Model):
bar = models.ForeignKey(PrimaryModel)
現在試圖在外殼創建實例:
>>> 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.
的問題是,爲什麼我們不能使用id PrimaryModel(如上面的錯誤示例),我們必須使用一個實例嗎? 也試圖在
class SecondaryModel(models.Model):
bar = models.ForeignKey(PrimaryModel, to_field='foo')
使用to_field
字段作爲但這並沒有改變這種狀況。
從Django教程:「按照慣例,Django將」_id「附加到外鍵字段名稱(是的,您也可以覆蓋它)。 https://docs.djangoproject.com/en/dev/intro/tutorial01/ –