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