11
votes

La requête correspondante de ContentType n'existe pas

J'ai récemment tenté de charger des appareils dans ma base de données. Lorsque j'exécute le serveur et chargez diverses pages, cependant, j'obtiens l'erreur suivante:

Caught DoesNotExist while rendering: ContentType matching query does not exist.


0 commentaires

7 Réponses :


15
votes

Si vous regardez à l'intérieur du luminaire, chaque appareil dispose de trois champs racine: le PK, les champs (qui est un ensemble de champs pour l'entrée PK'TH dans ce tableau) et un < Code> Modèle , qui contient l'appName.ModelName, à partir duquel l'ORM dérive les informations de la table.

C'est cet appname.ModelName que Django regarde, via le moteur de contenuType, pour déterminer quel tableau pour mettre vos données.

Votre ami vous a donné au moins un appareil dans lequel le contenu du modèle modèle ne correspond à aucun modèle réel de votre base de données. Cela peut être un mal orthographique, un malentendu, un changement de modèle ou de nom d'application ou de tout nombre de défauts. Mais le luminaire ne correspond à aucun modèle de votre projet et l'importateur de luminaire vous en dit de sorte que, en disant qu'il ne peut pas correspondre au nom désigné du modèle avec aucun nom de la table de contenu de projets.

Le correctif peut être aussi simple que de déterminer ce que le tableau est censé avoir en tant que contenuType, puis d'ouvrir le luminaire et d'effectuer une recherche de masse-et-remplacer sur le modèle Modèle: LIGNE.

EDIT:

Ceci est une longue (longue!) en retard. Si vous êtes sur le point de Dumpdata contenant des données génériques ou des références aux tables génériques ailleurs, vous devez (je ne peux vraiment pas souligner à quel point vous devez ) Apprenez le Dumpdata --Natural drapeau. Plutôt que d'enregistrer des informations sur le contenu de contenu par numéro, il l'enregistrera par nom, ce qui facilite la recharge de la base de données de loin et moins d'erreur.


2 commentaires

Depuis Django 1.7, le drapeau - naturel a été obsolète. Au lieu de cela, vous pouvez utiliser - naturel-étranger


J'ai utilisé ceci: python gérer.py buppdata --Naturel-étranger - Natural-Primary -e TentresTypes -E Auth.Permission> DataDump_2.json. Je reçois toujours l'erreur: la requête correspondante du contenu n'existe pas .: (auth.group:pk=none) field_value était '[u'add_answer', u'evaluator ', u'answer'] '



1
votes

Vous pouvez vérifier manuellement chaque table de contenu de contenu dans votre DB ou:

  • Si vos tables sont vides, supprime les tables de vos modèles dans votre DB et réexécuter Syncdb (uniquement si vous êtes en développement)

    ou vous pouvez utiliser l'un des outils de migration Django:


0 commentaires

0
votes

J'ai trouvé une cause différente de cette erreur, je voulais ajouter au cas où cela aide toute autre chose. Ce qui faisait cette question pour moi, c'est que j'avais créé un groupe avec des autorisations spécifiques, puis désinstallé une application qui a été référencée dans le groupe.

Plus précisément, j'avais installé la réversion à un point et j'ai créé un groupe appelé "Editeur de site" qui a donné une autorisation d'utilisateur à créer, modifier et supprimer des révisions. Plus tard, je suis une révision non installée, mais les autorisations de groupe sont restées lorsque j'ai exécuté la commande "Dumpdata": P>

    [
{
    "fields": {
        "name": "Site Editor",
        "permissions": [
            [
                "add_logentry",
                "admin",
                "logentry"
            ],
            [
                "change_logentry",
                "admin",
                "logentry"
            ],
            [
                "delete_logentry",
                "admin",
                "logentry"
            ],
            [
                "add_group",
                "auth",
                "group"
            ],
            [
                "change_group",
                "auth",
                "group"
            ],
            [
                "delete_group",
                "auth",
                "group"
            ],
            [
                "add_session",
                "sessions",
                "session"
            ],
            [
                "change_session",
                "sessions",
                "session"
            ],
            [
                "delete_session",
                "sessions",
                "session"
            ],
            [
                "add_site",
                "sites",
                "site"
            ],
            [
                "change_site",
                "sites",
                "site"
            ],
            [
                "delete_site",
                "sites",
                "site"
            ]
        ]
    },
    "model": "auth.group",
    "pk": 2
}]


0 commentaires

0
votes

de Django 1.7, les options de Dumpdata ont changé: Voir http://polarhome.com:753/doc /pyptHon-django-doc/html/topics/serialization.html

Vous avez donc une utilisation: p> xxx pré>

alternativement, on peut également résoudre la cause fondamentale : Assurez-vous que les types de contenu correspondent aux bases de données source et destination. Je suis confronté à la même erreur de déplacement des données entre les bases de données où DB1 avait toujours des types de contenu des applications qui avaient été supprimées en moyenne. Importation de ceux-ci dans DB2 où les applications n'ont jamais été présentes sur ce message d'erreur. P>

Dans ce cas, Editez le niveau de base de données - la table DJANGO_Content_Type dans DB1 et supprimez les types de contenu qui ne sont plus utilisés dans l'application Django. Ensuite, migrez ou copiez les données sur DB2 à nouveau. P>

Si les types de contenu sont référencés dans d'autres tables, vous devrez peut-être les supprimer en premier ou utiliser une commande DROP CASCADE (Risky!). P >

AVERTISSEMENT: l'édition au niveau de la base de données est une entreprise risquée, assurez-vous donc de prendre une sauvegarde avant de vous engager et de ne pas le faire sur des bases de données de production. P>

Selon le type de base de données, vous Besoin d'un outil différent pour faire la modification. P>

mysql -> [MySQLWorkBench][1]
postgres -> [pgAdmin][2] 
SQLite -> [SQLite Browser][3]


0 commentaires

0
votes

Dans certains cas, cette erreur est provoquée lorsque votre appareil contient des références à un modèle qui n'existe pas, que cela n'a pas été installé ou son application n'a pas été ajoutée à votre installation installée. Malheureusement, le message d'erreur de Django est assez inutile lors de la suivi de cela.

Si vous modifiez la méthode QuerySet.get dans Django / dB / modèles / Query.py Pour imprimer Out le * args et ** kwargs passés, vous obtiendrez un message d'erreur plus utile comme: xxx

Ensuite, vous pouvez vérifier que ce modèle / application est installé ou supprimé ces enregistrements de votre appareil.


0 commentaires

0
votes

Avez-vous récemment changé pour utiliser postgres à partir de mysql ?

Lorsque vous interrogeez le contenu contenttypes avec quelque chose comme: < Pré> xxx

Ceci échoue car dans postgres ; app_label et modèle sont tous des champs minuscules. Ainsi utilisez le __ iexact recherche sur le terrain qui ignore le cas. xxx


0 commentaires

0
votes

C'est ce qui a fonctionné pour moi après beaucoup d'essais. J'avais beaucoup de problèmes avec des groupes et des journaux.

  • pendant que sur SQLLITE, START SERVER, allez à l'administrateur et supprimez tous les groupes. Ensuite, tapez les éléments suivants en shell:

    python gérer.py buppdata --Naturel-étranger --Naturel -Autural -e -e contenttypes -e auth.permission -e admin.logentry> datadump_3pson

  • Modifier les paramètres sur MySQL dans Paramètres.py

  • python manage.py loaddata datadump_3.json


0 commentaires