คือผม กำลังหัด django อยู่ตอนนี้
ก็เลยทำ blog เล่นๆ ขึ้นมาอันนึง โดย มี model เป็น แบบนี้
files ./project/blog/model.py
from django.db import models
from django.contrib.auth.models import User
class Blog(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
author = models.ForeignKey(User)
create_date = models.DateTimeField(auto_now_add=True)
update_date = models.DateTimeField(auto_now_add=True)
update_by = models.ForeignKey(User,related_name="update_by")
def __unicode__(self):
return self.title
ทีนี้ผมสั่ง python manage.py sql blog ผลการรัน
BEGIN;
CREATE TABLE "blog_blog" (
"id" integer NOT NULL PRIMARY KEY,
"title" varchar(255) NOT NULL,
"content" text NOT NULL,
"author_id" integer NOT NULL REFERENCES "auth_user" ("id"),
"create_date" datetime NOT NULL,
"update_date" datetime NOT NULL,
"update_by_id" integer NOT NULL REFERENCES "auth_user" ("id")
)
;
COMMIT;
และ syncdb แล้ว
แต่พอ รัน start server โดยเข้าไปเทสกับ ระบบ admin ของ django แล้ว
ตอนที่จะ add blog ครับ
เกิด error บอกว่า
OperationalError at /admin/blog/blog/add/
table blog_blog has no column named author_id
งงเลยครับ หาทางแก้ไม่ได้เลย ช่วยด้วยนะครับ
ขอบคุณมากๆ คับ
ลอง เอา related_name ออกดูครับ จาก
author = models.ForeignKey(User,related_name=‘author’)
เป็น
author = models.ForeignKey(User)
related_name น่าจะเอาไว้ใช้ในกรณีที่ reference ถึงตัว self object เองมากกว่านะครับ ลองดูจาก link ข้างล่างนี้
http://www.djangoproject.com/documentation/models/m2o_recursive/
แก้ได้แล้วครับ ขอบคุณมาก
เอาเฉพาะ related_name='author' ออก ส่วน update_by ไว้อย่างงั้น
และผมลอง ลยไฟล์ sqlite ออกไปแล้วสร้างใหม่ ปรากฏว่า ผ่านฉลุยคับ
update_date = models.DateTimeField(auto_now_add=True) น่าจะเป็น update_date = models.DateTimeField(auto_now=True) นะครับ