【问题标题】:Django modify or reset migrationsDjango 修改或重置迁移
【发布时间】:2020-05-27 11:22:58
【问题描述】:

我想编辑运行良好的模型(数据存储没有问题)。所以我编辑了模型类,并运行了manage.py makemigrations 命令,我认为它破坏了我的项目。即使我删除了我在模型上添加的内容,它也不会像以前那样工作。感谢您的帮助。

ps:我不在乎丢失我保存在我的数据库中的当前数据

运行迁移命令时的错误:django.core.exceptions.FieldError: Unknown field(s) (gendernumber) specified for Post

models.py(修改前)

from django.db import models

class Post(models.Model):

    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100)
    number = models.CharField(max_length=100)

    def __str__(self):
        return self.name

models.py(编辑后)

from django.db import models

class Post(models.Model):

    THE_GENDER = [
        ("Monsieur", "Monsieur"),
        ("Madame", "Madame")
    ]

    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100)
    gender = models.CharField(max_length=8, choices=THE_GENDER)
    number = models.CharField(max_length=100)


    def __str__(self):
        return self.name

forms.py

from django import forms
from .models import Post
from crispy_forms.helper import FormHelper


class post_form(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(post_form, self).__init__(*args, **kwargs)

        self.helper = FormHelper(self)

    class Meta:
        model = Post
        fields = ["name", "email", "gender" "number"]

【问题讨论】:

    标签: python django django-models model


    【解决方案1】:

    好吧,如果你不关心数据:

    1) 删除数据库。再次创建它。向 django 授予和刷新权限。

    2) 删除所有迁移文件夹,但不删除 init.py 文件,(或仅在 proyect 文件夹中运行此文件)

    find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
    find . -path "*/migrations/*.pyc"  -delete
    

    3) 运行 makemigrations 并迁移。

    编辑:检查 forms.py:

    fields = ["name", "email", "gender" "number"]

    这是你的问题,性别和数字必须用逗号分隔。

    fields = ["name", "email", "gender", "number"]
    

    另外,我添加了恢复莫妮卡评论的命令。谢谢。

    【讨论】:

    • 你应该添加find . -path "*/migrations/*.pyc" -delete,这样缓存的迁移文件也会被删除。缓存的文件有时会导致问题。
    • 感谢您的回答,我删除了迁移文件夹并运行了您的命令。但是当我让 manage.py makemigrations 它说:没有检测到更改,当我进入我的管理页面时,我仍然可以看到 SMS-POST 数据,但是当我点击它时给我错误
    【解决方案2】:

    将性别选择放在课堂之外。

    THE_GENDER = [
        ("Monsieur", "Monsieur"),
        ("Madame", "Madame")
    ]
    class Post(models.Model):
        name = models.CharField(max_length=100)
        email = models.CharField(max_length=100)
        gender = models.CharField(max_length=8, choices=THE_GENDER)
        number = models.CharField(max_length=100)
    
    
        def __str__(self):
            return self.name
    

    如果您真的不关心存储的数据,您可以删除迁移文件和数据库并再次进行迁移。

    【讨论】:

    • 感谢您的回答,也确实有效,我正在尝试删除 magrations 文件和数据,但看起来我遇到了错误、问题,我正在处理它
    • 确保没有在任何地方打开迁移和数据库文件,并删除迁移文件而不是文件夹。
    【解决方案3】:

    如果您使用的是 SQLite,请删除该文件。删除迁移中的文件,除了 init。在 pycache 中删除除 init 之外的所有内容。

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 2014-06-22
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2016-11-11
      • 2014-12-21
      相关资源
      最近更新 更多