簡體   English   中英

如何修復表 x 沒有名為 y 的列?

[英]How do I fix table x has no column named y?

我在 Django 中編輯了一個模型,結果出現以下錯誤:“表reserve_time 沒有名為reservation 的列”:

from django.db import models
import datetime

class Club(models.Model):
    establishment = models.CharField(max_length=200)
    address = models.CharField(max_length=200)
    def __unicode__(self):
        return self.establishment

class Day(models.Model):
    club = models.ForeignKey(Club)
    day = models.DateField('day')
    def __unicode__(self):
        return unicode(self.day)

class Court(models.Model):
    club = models.ForeignKey(Club)
    day = models.ForeignKey(Day)
    court = models.IntegerField(max_length=200)
    def __unicode__(self):
        return unicode(self.court)

class Time(models.Model):
    club = models.ForeignKey(Club)
    day = models.ForeignKey(Day)
    court = models.ForeignKey(Court)
    time = models.TimeField('time')
    reservation = models.CharField(max_length=200)
    def __unicode__(self):
        return unicode(self.time)

之后我運行了 python manage.py syncdb 和 python manage.py runserver ,但仍然出現上述錯誤。 有想法該怎么解決這個嗎? 如果我刪除“保留”字段,它工作正常。 在管理員中,出現“預訂”文本框,但當我嘗試保存時出現錯誤。

這里的問題是當您進行字段更改時,django 不會做任何事情來修復您的表格。 syncdb所做的只是創建尚不存在的表。 如果您決定更改架構並添加字段,則需要在數據庫中手動創建它們,或者刪除表並讓syncdb重新創建它,或者開始使用像South這樣的項目來處理數據庫遷移。

這行不通的原因是理論上您已經在表中擁有現有記錄,並且沒有確定的方法知道您對所有這些缺失的字段做了什么。 也許這些字段不能為空。 也許他們還有其他必須滿足的約束。 顯然南方可以處理這種情況。

更新(2019 年 12 月)

使用 django 已經有 7 年多了,但現在數據庫遷移功能似乎已經被整合為一流的概念: https : //docs.djangoproject.com/en/3.0/topics/migrations/

Syncdb 不會改變現有模型 dbwise。 一種可能性是手動編輯您的數據庫,或從您的數據庫中刪除模型並再次運行同步數據庫(不應在沒有適當備份的生產環境中完成)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM