Django изменение или сброс миграций - PullRequest
1 голос
/ 12 февраля 2020

Я хотел отредактировать мои модели, которые работали нормально (данные были сохранены без проблем). Поэтому я отредактировал класс моделей и запустил команду 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"]

Ответы [ 3 ]

2 голосов
/ 12 февраля 2020

Хорошо, если вам нет дела до данных:

1) Удалите базу данных. Создайте это снова. Предоставьте права и привилегии sh для django.

2) Удалите все папки миграции, но не файл init .py, (или просто запустите его в папке проекта)

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

3) запустить makemigrations и выполнить миграцию.

РЕДАКТИРОВАТЬ: check forms.py:

fields = ["name", "email", "пол "" число "]

здесь ваша проблема, пол и число должны быть разделены запятой.

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

Также я добавил команду Reinstate Monica's комментарий. Спасибо.

1 голос
/ 12 февраля 2020

оставьте выбор пола вне класса.

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

Вы можете удалить файлы миграции и базу данных и снова выполнить миграции, если вы действительно не заботитесь о сохраненных данных.

0 голосов
/ 12 февраля 2020

Если вы используете SQLite, то удалите файл. Удалите файлы в миграциях, кроме init. В pycache удалите все кроме init.

...