7
votes

Django - peuplement d'une base de données à des fins de test

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?


1 commentaires

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 @Matthew Schinckel est le plus proche de cela.


6 Réponses :


5
votes

Vous pouvez utiliser des luminaires à cette fin et le LOADDATA commandement de gestion.

Une approche est de le faire comme ça.

  1. Préparez votre base de données de test.

  2. Utilisez DUMPDATA pour créer JSON Export de la base de données.

  3. Mettez ceci dans les répertoire de votre application.

  4. Écrivez vos tests de l'unité pour charger cette "Fixture": https://docs.djangoproject.com/fr/2.2/topics/testing/tools/#django.test.transactiontestCase.fixtures


2 commentaires

0
votes

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. XXX

Il y a de meilleurs moyens de faire cela, Mais si vous voulez un test de test rapide, c'est la voie à suivre.


1 commentaires

Et vous courez dans le contexte de la coquille, non? python geper.py shell



3
votes

django Fixtures Fournissez un mécanisme pour importer des données sur 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>: xxx pré>

ou, dans un Commande de gestion dans 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()


0 commentaires

7
votes

vérifier cette application

https://github.com/aerosol/django-dilla/

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.


2 commentaires

C'est exactement le genre de chose que je cherchais. Merci un tas!


@Eeyore: Votre réponse ne me laissera pas dormir.



0
votes

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:

https://github.com/brobin/django-sed


0 commentaires

0
votes

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


0 commentaires