2013-05-13 2 views
1

Мой код модели выглядит следующим образом:Почему Django не создает внешний ключ для моей модели?

from django.db import models 

# Create your models here. 
class Post(models.Model): 
    title = models.CharField(max_length = 30) 
    text = models.CharField(max_length = 150) 

class Comment(models.Model): 
    text = models.CharField(max_length = 150) 
    post = models.ForeignKey(Post) 

работает

python manage.py sqlall yabe 

Результаты в

Mac-mini:yabedjango hn$ python manage.py sqlall yabe 
BEGIN; 
CREATE TABLE "yabe_post" (
    "id" serial NOT NULL PRIMARY KEY, 
    "title" varchar(30) NOT NULL, 
    "text" varchar(150) NOT NULL 
) 
; 
CREATE TABLE "yabe_comment" (
    "id" serial NOT NULL PRIMARY KEY, 
    "text" varchar(150) NOT NULL 
) 
; 

COMMIT; 
Mac-mini:yabedjango hn$ 

Я ожидал, что внешний ключ в yabe_comment. версия Python:

Python 2.7.4 (v2.7.4:026ee0057e2d, Apr 6 2013, 11:43:10) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 

Джанго версия:

django-admin.py --version 
1.5.1 
+2

Вы уверены, что вы скопировали весь вывод после запятой должно быть что-то вроде этого 'ALTER TABLE ' yabe_comment 'ADD CONSTRAINT' ... 'FOREIGN KEY (' post_id ') ССЫЛКИ' yabe_post '(' id '); ' – user2298943

+0

Да, у меня есть. После COMMIT; У меня просто есть командная строка – Hoa

ответ

0

Вы пропускаете весь вывод. Я скопировал вашу модель и попытался. Весь вывод команды: manage.py sqlall app_name является:

BEGIN; 
CREATE TABLE `head_post` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `title` varchar(30) NOT NULL, 
    `text` varchar(150) NOT NULL 
) 
; 
CREATE TABLE `head_comment` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `text` varchar(150) NOT NULL, 
    `post_id` integer NOT NULL 
) 
; 
ALTER TABLE `head_comment` ADD CONSTRAINT `post_id_refs_id_b2b5e564` FOREIGN KEY (`post_id`) REFERENCES `head_post` (`id`); 
CREATE INDEX `head_comment_87a49a9a` ON `head_comment` (`post_id`); 

COMMIT; 

PS. head - это имя приложения, которое я использую.

+0

Это то, что уже предложил пользователь2298943, так что не совсем ответ. OP, вероятно, должен указать более подробную информацию об окружающей среде. –

+0

Я изменил сообщение, чтобы включить информацию об окружающей среде. Я скопировал и вставил дословно – Hoa

+1

Это действительно странно. Я использую ту же версию Python и Django, которую вы используете. Запустите ./manage.py syncdb и перейдите в терминал mysql, чтобы подтвердить, созданы ли внешние ключи или нет. – pynovice

0
python manage.py sql yabe 

Вы можете увидеть "post_id" integer NOT NULL REFERENCES "blog_post" ("id")

BEGIN; 
CREATE TABLE "blog_post" (
    "id" integer NOT NULL PRIMARY KEY, 
    "title" varchar(30) NOT NULL, 
    "text" varchar(150) NOT NULL 
) 
; 
CREATE TABLE "blog_comment" (
    "id" integer NOT NULL PRIMARY KEY, 
    "text" varchar(150) NOT NULL, 
    "post_id" integer NOT NULL REFERENCES "blog_post" ("id") 
) 
; 

я думаю, что это помогло вам

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