Модель в DJANGO с 4 полями, два из которых выдают ошибку: «добавить необнуляемое поле ....». мой вопрос, почему другие два поля не дают ошибку - PullRequest
0 голосов
/ 25 мая 2019

здесь полная ошибка:

Вы пытаетесь добавить ненулевое поле «резюме» к продукту без значения по умолчанию;мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк).Пожалуйста, выберите исправление: 1) Укажите одноразовое значение по умолчанию (будет установлено во всех существующих строках) 2) Выйдите и позвольте мне добавить значение по умолчанию в models.py

Мой первый вопрос - почему не всеполя дают мне ошибку, даже если они идентичны?

Второй вопрос, как я могу это исправить, не набирая: TextField (default = "any string")?

Третий вопрос, я использую mysql. Если бы я использовал другой БД, получал бы я ту же ошибку?

models.py

from django.db import models

class Product(models.Model):
    title=models.TextField()
    description=models.TextField()
    price=models.TextField()
    summary=models.TextField()

admin.py

from django.contrib import admin
from .models import Product

admin.site.register(Product)

команда

python manage.py makemigrations

На моей странице администратора есть вкладка "Продукт".Когда я создаю продукт в окне администратора, у меня есть только два поля.описание и цена.

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Из-за ошибки я думаю, что в вашей базе данных есть существующие строки.Если вы хотите добавить новые столбцы в существующую таблицу, и вы не сказали, что столбец может быть обнуляемым на

summary=models.TextField(null=True)

Поэтому вы должны установить значение по умолчанию либо во время миграции, либо вы можете определить значение по умолчанию в вашей модели,Вы можете выбрать Option 1 во время makemigrations и установить 'Something' or None по умолчанию.

0 голосов
/ 25 мая 2019

В ошибке есть ответ: the database needs something to populate existing rows.

Это означает, что при первом добавлении в первый раз при создании модели и первом переносе для нее не было никаких строк экземпляров. Но теперь вы пытаетесь добавить другое поле отдельно к существующей базе данных, и Django просит вас указать значение по умолчанию для этих существующих строк.

Существует способ решить эту проблему:

Удалите миграции, в которых вы создали эту таблицу, и создайте новую миграцию, в которой все эти поля будут зачислены одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...