2014-03-19 49 views
0

在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字段作爲但這並沒有改變這種狀況。

+0

從Django教程:「按照慣例,Django將」_id「附加到外鍵字段名稱(是的,您也可以覆蓋它)。 https://docs.djangoproject.com/en/dev/intro/tutorial01/ –

回答

2

如果你想使用PrimaryModel的ID,你應該做這樣的:

b=testapp.models.SecondaryModel(bar_id=1) 
1

這個怎麼樣。

>>> 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,然後保存