【发布时间】:2014-03-19 09:27:09
【问题描述】:
出于说明目的,仅提供两个普通模型:
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')
但这并没有改变情况。
【问题讨论】:
-
来自 Django 教程:“按照惯例,Django 将“_id”附加到外键字段名称。(是的,您也可以覆盖它。)“。 docs.djangoproject.com/en/dev/intro/tutorial01
标签: django python-3.x django-models