2012-03-25 4 views
1

У меня есть follwing две таблицы:Как добавить ManyToManyField в существующую модель django?

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") 
) 
; 

Когда я выполнить этот файл в поле создается каким-то образом, но когда я открываю ВИСТ администратора и нажмите к определенному идентификатору, который приводит к изменению формы, это дает мне следующую ошибку:

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, в то время как Джанго ожидает visit_visit_researchprotocol и researchprotocol_id соответственно.

+0

Hi Daniel. Вы пишете, я сделал эту глупую ошибку в frustation.I также проверил ее, используя python manage.py sql appname. Наконец сделал это правильно. Я хотел бы спросить одну вещь, почему django создает внешний ключ после создания sql-запроса ManyToManyField. Поэтому, наконец, мы не требуем юга. Я очень нервничаю, когда добавляю это поле в сервер, и я не хочу никаких проблем там. Спасибо Daniel –

2

Всякий раз, когда я изменил модели столов, которые я использовал на юг, и эти команды для изменения структуры, и они всегда работали:

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

Вы можете попробовать это, и он должен работать, если вы все еще на юг установлены.

+0

Привет, спасибо за помощь. Я обошелся без юга, но только на моем локальном. Я хотел бы попросить, чтобы я тоже применял ту же процедуру на сервере, и я не хочу, чтобы там была какая-либо ошибка. Так что, пожалуйста, скажите мне, нужно ли ехать на юг , –

+0

Извините, но я не знаю альтернативы. Это то, что я всегда старался, и это всегда срабатывало для меня. Если вы сомневаетесь, что это сработает, тогда я, возможно, не предлагаю вам попробовать на юг. Если я приду на другую альтернативу, я обновлю свой ответ. –

+0

Большое спасибо reos.I ценю это! –

Смежные вопросы