62 votes

Obtention de l'erreur "Site Matching Query Does Not Exist" après la création d'un administrateur django

Je suis en train de suivre le tutoriel Django standard pour créer une administration pour une application. Après avoir commenté les informations relatives à l'administrateur dans les paramètres et lancé syncdb, j'obtiens ce message :

DoesNotExist at /admin/ Site matching query does not exist.

Quelqu'un peut-il m'aider à résoudre ce problème ?

108voto

Simeon Visser Points 30697

El Site pour votre projet Django est manquant. Chaque projet Django possède un objet Site qui contient le nom et le domaine du site. Il est généralement créé automatiquement lors de la création d'un projet Django (en particulier, lorsque l'objet syncdb ) mais dans votre cas, il semble que ce ne soit pas le cas.

Pour le réparer :

Ouvrez le shell Django de votre site ( python manage.py shell ).

Tapez ce qui suit :

>>> from django.contrib.sites.models import Site
>>> Site.objects.create(name='example.com', domain='example.com')

Si vous souhaitez modifier ces valeurs ultérieurement, allez dans votre panneau d'administration ( /admin/ ) et modifiez l'objet site dans la section Sites .

2 votes

Merci beaucoup. Juste pour clarifier à quel moment de la création de votre site l'objet site doit être créé ? Quand vous faites : django-admin.py startproject mysite ?

0 votes

@DavidHaddad : Je viens de vérifier le code source de Django et cela se produit après le fichier syncdb a créé les tables. Si votre projet utilise ensuite la commande django.contrib.sites puis il exécutera du code pour créer l'interface de l'utilisateur. Site objet.

0 votes

Super, c'est exactement après avoir lancé syncdb que l'erreur a été soulevée. Merci encore.

45voto

0sh Points 601

En plus de la réponse de Simeon Visser, pour ceux d'entre vous qui rencontrent encore des problèmes, assurez-vous que l'option SITE_ID dans vos paramètres correspond à l'ID de votre nouvelle création. Site -objet.

2 votes

Il convient de noter qu'avec django 1.8, la migration après l'ajout de l'option contrib.sites permet d'ajouter un site, mais vous devez ajouter l'option SITE_ID réglage. La réponse de Siméon n'est même pas nécessaire - juste le SITE_ID à 1.

2 votes

Si vous vous plantez comme je viens de le faire en supprimant l'enregistrement avec SITE_ID 1, créez simplement le nouvel enregistrement avec id=1 dans le shell.

4voto

Miao ZhiCheng Points 41

Vous pouvez également envisager d'utiliser la fonctionnalité de fixation de django pour alimenter les données automatiquement : https://docs.djangoproject.com/en/dev/howto/initial-data/

[
    {
        "model" : "sites.site",
        "pk" : 1,
        "fields": {
            "name"  : "example.com",
            "domain" : "127.0.0.1:8010"
        }
    }
]

0voto

Phil Friesen Points 1

Je suis un novice de Django. J'ai eu la même erreur en suivant le tutoriel. Mon site django_site La table DB était vide. J'ai choisi de supprimer toutes les tables nommées "django_*". Ensuite, lorsque j'ai réexécuté syncdb les tables manquantes de django ont été créées, et le fichier django_site La table de la base de données a été remplie avec id=1, domain=example.com, name=example.com. De toute évidence, le Site est soutenue par la classe django_site Table DB. Je comprends maintenant le problème et la solution ci-dessus qui a permis de remplir la table en utilisant la fonction Site.objects.create() méthode. Merci Simeon.

0voto

eviltnan Points 755

Si vous utilisez les fixtures South et initial_data, les données pourraient ne pas être chargées correctement. Pour le corriger, ajoutez

if 'test' in sys.argv or 'jenkins' in sys.argv:
    SOUTH_TESTS_MIGRATE = False

à la fin de votre fichier de paramètres

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X