Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro python manage.py migrate - Banco MySQL

Bom dia Alura,

Eu estou fazendo todos os exercícios usando o banco MySQL invés Postgres, pois o meu interesse é Python com MySQL. Até o momento estava funcionando bem todos os exercícios, mas quando chegou neste exercício 04 (Formulario de receita), falhou. Alterei o arquivo 'Models.py' na classe 'Receita' substituído Pessoa para User. A falha ocorreu no terminal quando executei "python manage.py migrate". Sei que o banco de dados Mysql não é o solicitado pelo curso, até estou tentando resolver, mas se tiver como me ajudar, agradeço.

Pfavor, veja abaixo.

 python manage.py migrate            
System check identified some issues:
WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
        HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/4.1/ref/databases/#mysql-sql-mode 
'django.db.utils.IntegrityError: (1452, '1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`alura_receita`.`#sql-96d8_4e`, CONSTRAINT `receitas_receita_pessoa_id_a8898e91_fk_auth_user_id` FOREIGN KEY (`pessoa_id`) REFERENCES `auth_user` (`id`))', '23000')  '

Arquivo alterado models.py

from datetime import datetime
from django.db import models
# from pessoas.models import Pessoa
from django.contrib.auth.models import User

class Receita(models.Model):
   # pessoa = models.ForeignKey(Pessoa, on_delete=models.CASCADE)
    pessoa = models.ForeignKey(User, on_delete=models.CASCADE)
    nome_receita = models.CharField(max_length=200)
    ingridientes = models.TextField()
    modo_preparo = models.TextField()
    tempo_preparo = models.IntegerField()
    rendimento = models.CharField(max_length=100)
    categoria = models.CharField(max_length=100)
    date_receita = models.DateTimeField(default=datetime.now, blank=True)
    foto_receita = models.ImageField ( upload_to = 'fotos/%d/%m/%Y/' , blank = True )
    publicada = models.BooleanField(default=False)
    def __str__(self):
        return self.nome_receita
1 resposta
solução!

Resolvi. Alterei o settings.py do diretório alurareceita. Inclui em 'OPTIONS': { 'sql_mode': 'traditional'. Deu certo agora.

# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': 'alura_receita',
        'USER': 'root',
        'OPTIONS': {
            'sql_mode': 'traditional',
            'autocommit': True
        }
    }
}
python manage.py migrateOperations to perform:  Apply all migrations: admin, auth, contenttypes, pessoas, receitas, sessions
Running migrations:
  Applying receitas.0006_alter_receita_pessoa... OK