2012-03-25 66 views
1

我有一个follwing两个表:如何在现有的django模型中添加ManyToManyField?

class Visit(models.Models): 

    date_created   = models.DateTimeField(auto_now_add=True) 
    date_modified   = models.DateTimeField(auto_now=True) 
    date_started   = models.DateTimeField(null=True, blank=True) 
    date_completed   = models.DateTimeField(null=True, blank=True) 
    # Here i want to add ManyToManyField 
    research    = ManyToManyField(ResearchProtocol) #Here i will write for adding the field 

class ResearchProtocol(models.Model): 

    title = models.CharField(max_length=30) 
    description = models.TextField() 
    start_date = models.DateField() 
    end_date = models.DateField() 

    def __unicode__(self): 
     return '%s' % self.title 

对于我写的SQL查询:

CREATE TABLE "visit_visit_research" (
    "id" serial NOT NULL PRIMARY KEY, 
    "visit_id" integer NOT NULL REFERENCES "visit_visit" ("id") DEFERRABLE INITIALLY DEFERRED, 
    "research_id" integer NOT NULL REFERENCES "www_researchprotocol" ("id") DEFERRABLE INITIALLY DEFERRED, 
    UNIQUE ("visit_id", "research_id") 
) 
; 

当我执行该文件以某种方式产生的场,但是当我打开VIST管理 并点击到一个特定的ID,导致改变形式它给我以下错误:

http://localhost:8000/admin/visit/visit/20/ 

Exception Type: DatabaseError at /admin/visit/visit/20/ 
Exception Value: column visit_visit_research.researchprotocol_id does not exist 
LINE 1: ...visit_research" ON ("www_researchprotocol"."id" = "visit_vis... 
            ^

有人说,你需要南一个如果没有南方,就不可能完成。这是唯一的解决方案吗?我正在使用Django 1.3.1,Python 2.7.2。

有人可以指导我我在做什么错误? 任何帮助将不胜感激。

在此先感谢。

回答

2

你已经调用了你的链接表visit_visit_research,其中的字段research_id,而Django分别期待visit_visit_researchprotocolresearchprotocol_id

+0

嗨,丹尼尔。你写我犯了一个愚蠢的错误在挫折。我也通过使用python manage.py SQL应用程序名来验证它。最后说得对。我想问一个问题,为什么在创建一个ManyToManyField sql查询之后,django创建了一个外键。所以最后我们不需要向南。我非常紧张,因为我已经将该字段添加到服务器中,并且我不想在那里出现任何问题。感谢丹尼尔 – 2012-03-28 06:34:16

2

每当我已经修改了我南方使用的表款,并且这些命令来修改结构,他们总是努力:

python manage.py convert_to_south "your_app" 
python manage.py migrate "your_app" 

你可以尝试这些,它应该工作,如果你仍然有南安装。

+0

嗨,感谢您的帮助。我管理没有南方,但只在我本地。我想问我也必须在服务器上应用相同的程序,我不想在那里发生任何错误。所以,你能告诉我是否有必要去南方。 – 2012-03-28 06:39:52

+0

对不起,但我不知道任何其他选择。这是我一直试着去做的,而且它一直对我有用。如果你怀疑它会起作用,那么我可能不会建议你尝试南下。如果我来到另一个选择,我会更新我的答案。 – 2012-03-28 10:32:25

+0

非常感谢。我很感激! – 2012-03-28 16:02:08

相关问题