Bonjour après avoir exécuté ce code dans un fichier models.py:

from django.db import models

# Create your models here.
class Topic(models.Model):
    top_name = models.CharField(max_length=264,unique=True)

    def __str__(self):
        return self.top_name

class Webpage(models.Model):
    topic = models.ForeignKey(
        'Topic',
        on_delete=models.CASCADE,
    )
    name = models.CharField(max_length=264,unique=True)
    url = models.URLField(unique=True)

    def __str__(self):
        return self.name

class AccessRecord(models.Model):
    name = models.ForeignKey(
        'Webpage',
        on_delete=models.CASCADE,
    )
    date = models.DateField()

    def __str__(self):
        return str(self.date)

En guise de note, j'avais des problèmes avec les migrations car je continuais à recevoir des messages d'erreur liés à .ForeignKey, j'ai donc obtenu le code suivant d'un autre forum, et il a finalement exécuté les migrations mais je ne suis pas sûr que ce code soit le problème ...

topic = models.ForeignKey(
    'Topic',
    on_delete=models.CASCADE,
)

Après des migrations réussies, j'ai couru

python manage.py migrate

Tout semblait bien migrer. Puis j'ai couru

python manage.py shell

Alors j'ai couru:

>>> from first_app.models import Topic
>>> print(Topic.objects.all())

Mais a obtenu l'erreur suivante:

OperationalError: no such table: first_app_topic

Voici la lecture complète:

Traceback (most recent call last):
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/backends/utils
.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/backends/sqlit
e3/base.py", line 396, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: first_app_topic

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/models/query.p
y", line 252, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/models/query.p
y", line 258, in __len__
    self._fetch_all()
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/models/query.p
y", line 1261, in _fetch_all
    self._result_cache = list(self._iterable_class(self))

File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/models/query.p
y", line 57, in __iter__

    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/models/sql/com
piler.py", line 1144, in execute_sql
    cursor.execute(sql, params)
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/backends/utils
.py", line 100, in execute
    return super().execute(sql, params)
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/backends/utils
.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/backends/utils
.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/backends/utils
.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/utils.py", lin
e 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/backends/utils
.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "/Users/homepage/opt/anaconda3/envs/MyDjangoEnv/lib/python3.8/site-packages/django/db/backends/sqlit
e3/base.py", line 396, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: first_app_topic

Models.py se trouve dans:

My_Django_Stuff/first_project/first_app/migrations/models.py

Toute aide serait grandement appréciée, j'ai lu un tas d'autres discussions sur ce sujet et certains disent de lancer le db.sqlite3 et pycache - est-ce ce que je dois faire?

Thnx

0
JohnHarbaugh 14 sept. 2020 à 10:14

3 réponses

Meilleure réponse

Je pense avoir résolu le problème en procédant comme suit:

python manage.py migrate

python manage.py makemigrations first_app

python manage.py migrate

python manage.py shell

from first_app.models import Topic

print(Topic.objects.all())

Je crois que b4 je n'ai pas fait appliquer les migrations à mon first_app (la 2ème étape), puis relancer la migration (la 3ème étape). J'ai également réinstallé django, cette fois avec le programme d'installation de pip et cela semble fonctionner beaucoup mieux - car je recevais des messages d'erreur b4. Juste après avoir installé django dans le dossier de l'application dans lequel je travaillais, il disait qu'il ne trouve pas django. Cela s'est passé par intermittence. B4 J'ai installé django avec la commande:

conda install django

Mais j'ai eu des problèmes avec conda, je dois toujours coller:

CHEMIN = / Utilisateurs / aleong / opt / anaconda3 / bin: $ PATH

B4 Je crée un env virtuel avec:

conda create --name myDjangoEnv django

Aussi la correction du code dans mon fichier models.py comme suggéré par Somto (thnx Somto) a aidé, j'ai remplacé mon code par:

topic = models.ForeignKey(Topic, on_delete= models.CASCADE)
0
JohnHarbaugh 14 sept. 2020 à 20:58

Vous importez une requête Topics et non Topic

C'est le destin

print (Topic.objects.all())

Et dans votre modèle WebPage, c'est censé être

topic = models.ForeignKey(Topic, on_delete= models.CASCADE)

La table que vous référencez peut être une chaîne

0
Somto 14 sept. 2020 à 07:22

Vos modèles ne sont pas synchronisés avec la base de données dont vous disposez.

La solution suivante effacera vos données de votre base de données! Veuillez effectuer une sauvegarde si vous avez des données importantes ou des points de contrôle pendant votre phase de développement / production-débogage

Je suggère de supprimer tout le dossier migrations/ et de faire python manage.py flush. Si le problème persiste, vous pouvez essayer django_extensions. Si vous l'avez, essayez python manage.py reset_db. Cela RÉINITIALISE tout, même avec les migrations. C'est ma dernière solution en ce qui concerne les modèles qui seraient toujours désynchronisés.

0
CodexLink 14 sept. 2020 à 13:37