J'ai besoin de peupler ma base de données avec un tas d'entrées factices (environ 200+) afin que je puisse tester l'interface administrative que j'ai faite et je me demandais s'il y avait une meilleure façon de le faire. J'ai passé la meilleure partie de ma journée hier essaye d'essayer de le remplir à la main (c'est-à-dire en emballant des choses comme ceci my_model (title = "asdfasdf", champ2 = "Laksdj" ...) dans un tas de "pour x dans la plage ( 0,200): "Boucles) et abandonnés parce que cela n'a pas fonctionné comme je m'attendais. Je pense Ce est ce dont j'ai besoin à utiliser, mais vous n'avez pas besoin d'avoir des données (existantes) dans la base de données pour que cela fonctionne? p>
6 Réponses :
Vous pouvez utiliser des luminaires à cette fin et le LOADDATA commandement de gestion. P>
Une approche est de le faire comme ça. P>
Préparez votre base de données de test. P> LI>
Utilisez DUMPDATA pour créer JSON Export de la base de données. P> LI>
Mettez ceci dans les code> répertoire de votre application. p> li>
Écrivez vos tests de l'unité pour charger cette "Fixture": https://docs.djangoproject.com/fr/2.2/topics/testing/tools/#django.test.transactiontestCase.fixtures P> Li> ol>
Je devais juste ajouter quelques détails.
docs.djangoproject.com/fr/2.2 / Thèmes / Test / Test / Outils / ...
Je ne sais pas pourquoi vous avez besoin d'une sérialisation. Tant que vous avez configuré votre fichier django Params.py pour pointer vers votre base de données de test, peupler une base de données de test ne devrait être rien de plus que d'économiser des modèles. Il y a de meilleurs moyens de faire cela, Mais si vous voulez un test de test rapide, c'est la voie à suivre. p> p>
Et vous courez dans le contexte de la coquille, non? python geper.py shell code>
django Fixtures Fournissez un mécanisme pour importer des données sur ou, dans un Commande de gestion dans Syncdb . Cependant, cette propagation de données initiale est souvent plus facile via le code Python. La technique que vous décrivez devrait fonctionner, via Syncdb ou une commande de gestion. Par exemple, via Syncdb, dans my_app / gestion.py code>: MyApp / Gestion / Commandes / My_Command.py Code>: P> from django.core.management.base import BaseCommand, CommandError
from models import MyModel
class MyCommand(BaseCommand):
def handle(self, *args, **options):
if len(args) > 0:
raise CommandError('need exactly zero arguments')
for i in range(1000):
MyModel(number=i).save()
vérifier cette application p>
https://github.com/aerosol/django-dilla/ P >
Disons que vous avez écrit votre application de blog (oh ouais, votre préféré!) à Django. Les tests unitaires ont bien tourné, et tout fonctionne extrêmement rapide, même ces requêtes ultra-longues générées par Orm. Vous avez ajouté plusieurs postes classés et il est toujours stable comme un rocher. Vous êtes tout à fait sûr que l'application est efficace et prête à être déployée en direct. À droite? Tort. p>
C'est exactement le genre de chose que je cherchais. Merci un tas!
@Eeyore: Votre réponse ne me laissera pas dormir.
L'application recommandée par la réponse acceptée n'est plus maintenue, mais la graine de Django peut être utilisée comme remplacement: p>
Je recommanderais Django-autofixtures à vous. J'ai essayé à la fois Django_Seed et Django-Autofixtures, mais Django_seed a beaucoup de problèmes avec des clés uniques. Django-Autofixtures prend en charge des contraintes uniques, primaires et d'autres dB lors de la remplissage de la base de données p>
Vous ne voulez pas sérialiser. Vous souhaitez créer des données initiales en exécutant dans la coque, en enregistrant les instances, puis exportant la base de données sur un appareil dans un format tel que JSON à l'aide de LoadData:
Python Manage.py Dumdata --Format = JSON --NEDENT = 4 AppName code> @Matthew Schinckel est le plus proche de cela.