Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Deletando app

Fiz todo o procedimento como no videos para excluir o app 'pessoas' mas dai dá este erro:

RuntimeError: Model class pessoas.models.Pessoa doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

11 respostas

Algum poderia me dar uma ajuda?

Oiii Igor, como você está? Espero que esteja bem ^-^

Peço perdão pela demora em obter um retorno.

Compartilha o código de como está a sua lista de INSTALLED_APPS no arquivo settings.py da pasta alurareceita.

Verifica também se em algum momento no seu código você ainda importa o app de pessoas, se sim, exclua a importação.

Fico no aguardo para poder te ajudar, tá bom?

Aqui deu esse erro também. Resolvi criando uma meta classe com o nome da app nos models.py:

    class Meta:
        app_label = 'pessoas'

Segue o código:

# Application definition

INSTALLED_APPS = [
    'receitas',
    'usuarios',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

###########################

#pessoas/admin.py

from django.contrib import admin
from .models import Pessoa

class ListandoPesoas(admin.ModelAdmin):
    list_display = ('id', 'nome', 'email')
    list_display_links = ('id', 'nome')
    search_fields = ('nome',)
    list_per_page = (2)

admin.site.register(Pessoa, ListandoPesoas)

#################################

#pessoas/apps.py

from django.apps import AppConfig

class PessoasConfig(AppConfig):
    name = 'pessoas'

#########################

#pessoas/models.py

from django.db import models

class Pessoa(models.Model):
    nome = models.CharField(max_length=200)
    email = models.CharField(max_length=200)
    def __str__(self):
        return self.nome

Igor, analisei os trechos que compartilhou e aparentemente está correto. Tente a sugestão que a Renata sugeriu, adicionar o app_label em seu modelo, como mostro abaixo:

from django.db import models

class Pessoa(models.Model):

    nome = models.CharField(max_length=200)
    email = models.CharField(max_length=200)
    def __str__(self):
        return self.nome

    class Meta:
        app_label = 'pessoas'

Caso ainda não resolva, peço por gentileza que upe seu projeto no drive ou github e coloque o link na resposta para que eu possa fazer os testes por aqui.

Fico no aguardo.

Boa tarde Nádia infelizmente não consegui segue o link do projeto desde de já agradeço pela ajuda:

https://drive.google.com/drive/folders/12Hk2kPPUg35MFMmXoovDLRfPNh4yd_mM?usp=sharing

Igor, vou baixar seu projeto e efetuar os testes. Te retorno o mais breve possível =)

"Pessoas" isn't in an application in INSTALLED_APPS.

Tem que colocar "pessoas" lá no INSTALLED_APPS do settings.py, como você fez com receitas e usuários.

Renata, isso resolve, mas nessa aula em específico o app Pessoas sai dos INSTALLED_APPS pois ele é deletado.

solução!

Igor, executei o seu código e o terminal apresentou o seguinte erro:

django.db.migrations.exceptions.NodeNotFoundError: Migration receitas.0006_auto_20200930_0957 dependencies reference nonexistent parent node ('pessoas', '0001_initial')

Isso está acontecendo porque no app de receitas ainda tem uma migração que depende do app de pessoas, a migração 006 que está localizada na pasta migrations dentro do app de receitas, veja:

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    dependencies = [
        ('pessoas', '0001_initial'),
        ('receitas', '0005_auto_20200930_0939'),
    ]

    operations = [
        migrations.AlterField(
            model_name='receita',
            name='pessoa',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pessoas.pessoa'),
        ),
    ]

Precisamos excluir a ligação dessa migração com o app de pessoas. E para isso, iremos excluir a linha da tupla que se refere ao app de pessoas e após isso, substituir o field para usar a autenticação de usuário do Django e não mais a de pessoas. Fica da seguinte forma:

from django.db import migrations, models
import django.db.models.deletion
from django.conf import settings


class Migration(migrations.Migration):

    dependencies = [
        ('receitas', '0005_auto_20200930_0939'),
    ]

    operations = [
        migrations.AlterField(
            model_name='receita',
            name='pessoa',
           field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
        ),
    ]

Tente fazer essa alteração e me diga se obteve êxito.

Fico no aguardo.

Ae deu certo valeu Nádia você é a melhor!