J'ai un problème avec Django 1.2.4.
Voici un modèle: p> juste après avoir rincé la base de données, j'utilise le shell: p> quoi Est-ce que je fais mal ici? p> Mise à jour forte>: Si je commencez le Mise à jour 2 strong>: curieusement, ce test d'unité fonctionne simplement bien: p> Pourquoi fonctionne-t-il ici mais pas dans la coquille? P> < Strong> Mise à jour 3 Strong>: La raison pour laquelle il fonctionne dans des tests unitaires, mais pas la coque peut avoir quelque chose à voir avec les différentes bases de données utilisées: p> update 4 strong>: confirmé que lorsque j'utilise SQLite3 comme dB, tout fonctionne bien. P> P> Foundanykey Code>, le problème disparaît. P>
5 Réponses :
Essayez de supprimer / essuyer complètement la base de données avant d'exécuter Syncdb. P>
Je me souviens avoir besoin de le faire un moment où j'avais apporté des modifications aux champs de clés étrangers. P>
Il est spécifié dans Django Documentation que Syncdb ne modifiera pas les tableaux existants. Donc, si vous avez créé les tables avec Syncdb, puis modifiez des champs en modifiant le modèle, vous devez tout supprimer: ./ manage.py réinitialiser myApp code> ferait le tour. Cela fonctionne évidemment pour unitest, car les tables sont recréées à chaque cycle.
Si vous ne souhaitez pas réinitialiser votre DB après chaque changement de modèle, essayez sud .
J'ai fait face au même problème et remarqua que dans la base de données du backend, le champ qui abrite des clés étrangères n'existait pas. Le problème a disparu après avoir créé le champ (que je pense est particulièrement particulier). Django ne semble pas créer de champ étiqueté comme clé étrangère. Une raison pour laquelle? P>
J'ai corrigé ce problème en laissant tomber le tableau spécifique à ce modèle de question. Ensuite utilisé:
su postgres #change user to postgres psql <datebase> #access shell for <datebase> database \d #list all tables DROP TABLE "" CASCADE #select a table to drop \q #exit shell
Si vous utilisez Django 1.8, vous devez créer la colonne. Pour vous assurer de créer la colonne, trouvez correctement le fichier de migration dans lequel vous avez créé le champ et exécutez:
./manage.py sqlmigrate app_name migration_name_sans_extension
Pouvez-vous dire quelle est la colonne? Par exemple, j'ai deux colonnes à fourrure: référé_by et prise en charge_by qui font tous deux référence aux utilisateurs. J'ajouterais alors deux autres colonnes: user_referred_by et user_supported_by et ils référencent l'utilisateur (ID) ?? Pouvez-vous dire où dans les 1.8 docs ceci est couvert?
Par exemple, je reçois toujours django.db.utils.ProgrammingError: l'utilisateur de la colonne.referred_by_id n'existe pas.
Les colonnes feront référence par ID si vous spécifiez un champ to_field. Je ne suis pas sûr que cela soit couvert dans les documents, mais les informations sur les champs FK sont ici: docs.djangoproject.com/fr/1.8/ref/models/fields/#fferignkey
Cela devrait être la réponse acceptée, car elle s'applique aux versions modernes de Django et toutes les autres réponses sont vraiment inutiles pour travailler avec des tables de base de données que vous ne pouvez vraiment pas vous permettre de tomber.
Veuillez lire ceci avant de déposer tout votre DB forte> p>
J'ai eu le même problème. Veuillez lire l'exception complètement. J'ai eu une classe Modelform qui a lu ma table pour construire un formulaire et une exception était là. J'ai commenté puis dirigé les makemigrations et fonctionne complètement. Après cela, j'ai commenté la classe Modelform et tout fonctionne parfaitement. p>
J'espère que cela aide. P>
Pour être clair, vous avez exécuté
syncdb code> sur une base de données vide ou édité à la main le schéma? Il semble que vous soyez conscient qu'un modèle modifié ne mettra pas automatiquement à jour la table ... mais en vous assurant queJe veux juste être sûr que ce n'est pas sûr que ce n'est pas un problème de base de données existant: avez-vous laissé tomber votre base de données Postgres et la réo-créée? J'ai certainement vu des problèmes persistants lorsque les gens essaient
affleurant code> ou partiels synchyses. La raison pour laquelle je demande est que cela soutiendrait une puanteur si un simple modèle de champ de 2 champs n'a pas créé de colonnes correctement sur PostgreSQL_PSYCOPG2. Avez-vous également vérifié sifoo_foo.bar_id code> existe dansdbshell code>? Plus le Merrier!"Colonne foo foo.bar _id n'existe pas" - y a-t-il une table "foo foo" avec une colonne "bar_id"?
Une alternative à la réinitialisation de la DB (comme Bjorn pointe correctement) est d'utiliser Sud pour les migrations - South. Aeracode.org/docs/installation.html . Il est extrêmement simple à utiliser et si vous avez besoin d'un guide étape par étape, c'est un bon post à lire: Mitchfournier.com/2010/06/23/...