models.py:可能的错误
class root(models.Model):
uid_string = models.CharField(max_length=255, unique=True)
class tree(models.Model):
uid_string = models.ForeignKey(root, to_field='uid_string', db_column='uid_string')
class shrub(models.Model):
uid_string = models.ForeignKey(root, to_field='uid_string')
显然,在shrub
列将uid_string_id
而tree
列将蜜蜂uid_string
。 _id附录被抑制。
如果我现在在做一个
rootentry = root(uid_string = "text")
root.save()
我得到不同的行为,执行以下查询:
>>> shrubentry = shrub(uid_string_id = rootentry.uid_string)
>>> treeentry = tree(uid_string = rootentry.uid_string)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/site-packages/django/db/models/base.py", line 328, in __init__
setattr(self, field.name, rel_obj)
File "/usr/local/lib/python2.6/site-packages/django/db/models/fields/related.py", line 318, in __set__
self.field.name, self.field.rel.to._meta.object_name))
ValueError: Cannot assign "'text'": "tree.uid_string" must be a "root" instance.
>>>
明显rootentry.uid_string
是text
谢谢你的回答。据我了解,你使用to_field ='uid_string'来指定关系,并简单地通过db_column =“”来指定列的名称。退出to_field将引用主键(id)。我错了吗? – tpm 2010-09-27 17:46:25
你说得对。退出'to_field'是正确的。我的错。我在编辑我的答案。 – 2010-09-27 17:50:13
谢谢你的努力。但请再看一遍。这两个模型都有一个'to_field'来指定列。除了'db_column'定义的列名外,模型是相同的。 – tpm 2010-09-27 19:04:10