簡體   English   中英

當我向類模型添加兩個新字段時 Django 中的錯誤

[英]Error in django when I add two new fields to a class model

我的腳本“myProject.models.difference.py”中有一個名為 Difference 的類,它是:

class Difference(models.Model):
    comparator = models.ForeignKey(ScenarioComparator, on_delete=models.CASCADE)
    summary = models.CharField('summary',max_length=900000)

在我的腳本“myProject.admin.scenario.py”中,我有相應的管理類:

class DifferenceAdmin(admin.ModelAdmin):
     list_display = ("comparator","summary",)

但我需要在我的類差異中添加兩個字段:

class Difference(models.Model):
    comparator = models.ForeignKey(ScenarioComparator, on_delete=models.CASCADE)
    summary = models.CharField('summary',max_length=900000)
    diff_class = models.CharField('diff_class',max_length=1000)
    diff_field = models.CharField('diff_field',max_length=500)

之后我讀到下一個錯誤:“沒有這樣的列:myproject_difference.diff_class”。 但是,如果我以這種方式評論新字段 diff_class, diff_field:

class Difference(models.Model):
    comparator = models.ForeignKey(ScenarioComparator, on_delete=models.CASCADE)
    summary = models.CharField('summary',max_length=900000)
    #diff_class = models.CharField('diff_class',max_length=1000)
    #diff_field = models.CharField('diff_field',max_length=500)

然后錯誤消失。 ¿我必須做什么才能添加新字段?

您需要進行數據庫遷移。 保存模型:

class Difference(models.Model):
    comparator = models.ForeignKey(ScenarioComparator, on_delete=models.CASCADE)
    summary = models.CharField('summary',max_length=900000)
    diff_class = models.CharField('diff_class',max_length=1000)
    diff_field = models.CharField('diff_field',max_length=500)

然后執行以下兩個manage.py命令:

$ python3 manage.py makemigrations
$ python3 manage.py migrate

每次更改models.py時都需要這樣做

將字段添加到模型后,您必須進行遷移以將列添加到數據庫

運行這兩個命令

python manage.py makemigrations
python manage.py migrate

myProject.models文件夾中,是否有__init__.py文件? 在它里面,你需要這個:

from .difference import *

如果模型位於與 models.py 不同的 .py 文件中,則需要將它們導入到init .py 文件中,否則 Django 應用程序將不知道它在那里。

當您執行python manage.py makemigrations時,它是否在遷移文件夾中創建了遷移文件?

解決方案是為diff_classdiff_field寫一個默認值。 當您運行python manage.py makemigrations它會出現一條警告,提示您需要默認值。

所以我寫

class Difference(models.Model):
    comparator = models.ForeignKey(ScenarioComparator, on_delete=models.CASCADE)
    summary = models.CharField('summary',max_length=900000)
    diff_class = models.CharField('diff_class',max_length=1000,default = 'class')
    diff_field = models.CharField('diff_field',max_length=500, default= 'field')

暫無
暫無

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

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