Créer des migrations

a marqué ce sujet comme résolu.

Hello à tous,

Dans mon projet Django, je vais avoir besoin de répartir des utilisateurs dans des groupes. Mais si je fais tout ca depuis l'interface d'administration, lorsque je vais passer en production, je vais devoir tout refaire manuellement. Donc j'aimerai savoir comment procéder pour créer une migration qui fera de sorte que quand je ferai un migrate apres un clone de mon projet sur le serveur de prod, mes groupes ainsi que leurs permissions assignées seront créés.

Merci

Les fichiers de migrations sont gérés automatiquement quand tu fais makemigration mais rien ne t'empeche d'en compléter un ou d'en rajouter un manuellement.

Reprend un fichier de migration de Django, renomme le avec le numéro suivant, remplis bien la dépendance de migration et met ton code qui ajoute les données en base.

Hello et merci a vous ! J'ai une solution un peu plus simple qui consiste en fait a juste dumper les groupes de ma base

1
python manage.py dumpdata auth.group > groups.json

Et ensuite en prod j'aurai juste à faire un

1
python manage.py loaddata groups.json

Ca me parait plus simple.

je n'ai pas besoin de dumper aussi auth.permission si jamais toutes les permissions que j'ai put creer se trouvent dans mes modeles ? Parce que je suppose que le migrate se chargera de les ajouter

Hello et merci a vous ! J'ai une solution un peu plus simple qui consiste en fait a juste dumper les groupes de ma base

1
python manage.py dumpdata auth.group > groups.json

Et ensuite en prod j'aurai juste à faire un

1
python manage.py loaddata groups.json

Ca me parait plus simple.

je n'ai pas besoin de dumper aussi auth.permission si jamais toutes les permissions que j'ai put creer se trouvent dans mes modeles ? Parce que je suppose que le migrate se chargera de les ajouter

AlexandreMarkiewicz

En fait pour dumper l'affectation entre les groupes et les utilisateurs, tu dois dumper le modèle auth.user et le problème c'est que du coup tu dumpe les mots de passe (même s'il ne sont pas en clair ce n'est pas top) avec. Et ça suppose que tu ne pourras plus te servir de cette méthode si un utilisateur change son mot de passe/email/username/etc., il faudra refaire le dump.

L'avantage de la migration c'est que c'est automatique et que personne ne risque d'oublier de le faire si d'autres dev se retrouvent à bosser avec toi. Mais après tu fais comme tu préfère. Perso au boulot on récupère régulièrement des dump de la base pour justement avoir des vrais données concrètes.

Merci a vous ! Je vais partir sur un dump, et puis je verrai par la suite pour implémenter des migrations

Mais avec le dump, si plus tard je decide de faire evoluer les permissions de mes groupes, et que je load le nouveau dump en prod, est-ce que je vais perdre tout mes users liés à ces groupes ?

EDIT: Je viens de verifier c'est bon

+0 -0

C'est effectivement beaucoup plus propre et maintenable avec des migrations :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# -*- coding: utf-8 -*-
# Generated by Django 1.10.3 on 2016-12-08 16:31
from __future__ import unicode_literals

from django.db import migrations
from django.contrib.auth.models import Group, Permission

def add_team_to_group_dieux(apps, schema_editor):
    dieux = Group.objects.get(name="dieux")
    add_team = Permission.objects.get(codename='add_team')
    dieux.permissions.add(add_team)
    dieux.save()

class Migration(migrations.Migration):

    dependencies = [
        ('teams', '0006_auto_20161129_1526'),
    ]

    operations = [
            migrations.RunPython(add_team_to_group_dieux)
    ]
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte