[PYTHON] Personnalisez librement le modèle. Changer le nom de la variable et le nom du champ du modèle de l'application Django / Django Rest Framework ~ Comment refléter le déploiement sur heroku Memo

introduction

Le models.py de Django est lié à la base de données par rapport à d'autres views.py, donc une fois que vous vous en mêlez, cela semble être très gênant, mais cette fois la solution a été mise en place, alors soyez poli à votre manière J'ai essayé de le décrire. Si c'est difficile à comprendre, je suis désolé.

Environnement de vérification

Python==3.6.1 Django==2.2.1 djangorestframework==3.11.0

Partie 1: Comment changer le nom de variable du modèle

"La migration de models.py est terminée! Oh, j'ai trouvé une faute de frappe dans le nom de la variable ... Réécrire et migrer (` $ python manage.py makemigratios → $ python manage.py migrate```) Même si je le fais, une erreur ... Que dois-je faire? " Voici comment résoudre ce problème.

1: Créer un fichier de migration

Tapez une commande

$ python manage.py makemigrations --empty <nom de l'application>

Migrations for '<nom de l'application>':
  <nom de l'application>/migrations/0012_auto_20200610_0000.py

2: Il y a un fichier de migration vide dans <nom de l'application> / migrations```

#0012_auto_20200610_0000.py


from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('<nom de l'application>', '0011_auto_20200610_1111'),
    ]

    operations = [
    ]

3: Écrire une instruction de réécriture de variable dans le fichier de migration

(1) En cas de changement

#0012_auto_20200610_0000.py


from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('<nom de l'application>', '0011_auto_20200610_1111'),
    ]

    operations = [
        migrations.RenameField(
            model_name='<Le nom du modèle que vous souhaitez modifier dans l'application>',
            old_name='image1Discription', #Exemple: nom de variable que vous souhaitez modifier
            new_name='image1Description' #Exemple: nom de variable après modification
        )
    ]

(2) Lorsqu'il y a deux ou plusieurs changements

#0012_auto_20200610_0000.py


from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('<nom de l'application>', '0011_auto_20200610_1111'),
    ]

    operations = [
        migrations.RenameField(
            model_name='<Le nom du modèle que vous souhaitez modifier dans l'application>',
            old_name='image1Discription', #Exemple: nom de variable que vous souhaitez modifier
            new_name='image1Description' #Exemple: nom de variable après modification
        ),
        migrations.RenameField(
            model_name='<Le nom du modèle que vous souhaitez modifier dans l'application>',
            old_name='image2Discription', #Exemple: nom de variable que vous souhaitez modifier
            new_name='image2Description' #Exemple: nom de variable après modification
        )
    ]

4: test de migration locale

N'oubliez pas de spécifier le DB de settings.py localement.

$ python manage.py migrate
Running migrations:
  Applying realestatedb.0012_auto_20200610_0000... OK

Vous pouvez maintenant changer la base de données locale (comme postgre). Étant donné que models.py est lié au comportement d'applications autres que DB, même si vous l'exécutez maintenant, vous obtiendrez une erreur 503, mais si vous écrivez des modifications dans models.py dans un processus ultérieur, l'erreur sera corrigée.

5: Téléchargez sur heroku et faites de même à distance

N'oubliez pas de spécifier le DB de settings.py à distance.

$ git add .
$ git commit -m "db revise"
$ git push heroku master

(Attendre)

$ heroku run python manage.py migrate
Running migrations:
  Applying realestatedb.0012_auto_20200610_0000... OK

Avec cela, le DB distant est OK pour le moment.

6: Modifiez models.py, views.py serializers.py, etc. et déployez-le sur heroku.

$ git add .
$ git commit -m "db revise"
$ git push heroku master

(Attendre)

Si vous vérifiez l'opération et qu'elle est OK, vous avez terminé. Tout simplement parce que vous avez joué avec models.py, la migration est déjà terminée, vous n'avez donc pas besoin de migrer davantage.

Partie 2: Comment modifier le type de données du champ de modèle

"La migration de models.py est terminée! Oh, je pensais que c'était cette variable Int, mais c'était Datetime, pas Int ... J'ai fait une erreur ... Réécrire et migrer (` $ python manage.py makemigratios → $ python Dans manage.py migrate```), une erreur ... quoi que je fasse ... que dois-je faire? " Voici comment résoudre ce problème.

1: Créer un fichier de migration

$ python manage.py makemigrations --empty realestatedb

Migrations for 'realestatedb':
  realestatedb/migrations/0012_auto_20200610_0000.py

2: Il y a un fichier de migration vide dans <nom de l'application> / migrations```

#0012_auto_20200610_0000.py


from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('<nom de l'application>', '0011_auto_20200610_1111'),
    ]

    operations = [
    ]

3: Écrire une instruction de réécriture de variable dans le fichier de migration

from django.db import migrations, models



 Veuillez noter qu'une erreur se produira si vous n'ajoutez pas l'importation de `` `` models` '' à.


#### **`#0012_auto_20200610_0000.py`**
```py

from django.db import migrations, models

class Migration(migrations.Migration):

    dependencies = [
        ('<nom de l'application>', '0011_auto_20200610_1111'),
    ]

    operations = [
        migrations.AlterField(
            model_name='<Le nom du modèle que vous souhaitez modifier dans l'application>',
            name='FeePayDate', #Exemple: nom de variable que vous souhaitez modifier
            field=models.DateTimeField(blank=True, null=True), #Exemple: nom du type de données après modification
        ),
    ]

4: test de migration locale

N'oubliez pas de spécifier le DB de settings.py localement.

$ python manage.py migrate
Running migrations:
  Applying realestatedb.0012_auto_20200610_0000... OK

Vous pouvez maintenant changer la base de données locale (comme postgre). Étant donné que models.py est lié au comportement d'applications autres que DB, même si vous l'exécutez maintenant, vous obtiendrez une erreur 503, mais si vous écrivez des modifications dans models.py dans un processus ultérieur, l'erreur sera corrigée.

5: Téléchargez sur heroku et faites de même à distance

N'oubliez pas de spécifier le DB de settings.py à distance.

$ git add .
$ git commit -m "db field revise"
$ git push heroku master

(Attendre)

$ heroku run python manage.py migrate
Running migrations:
  Applying realestatedb.0012_auto_20200610_0000... OK

Avec cela, le DB distant est OK pour le moment.

6: Modifiez models.py, views.py serializers.py, etc. et déployez-le sur heroku.

$ git add .
$ git commit -m "db field revise"
$ git push heroku master

(Attendre)

Si vous vérifiez l'opération et qu'elle est OK, vous avez terminé. Tout simplement parce que vous avez joué avec models.py, la migration est déjà terminée, vous n'avez donc pas besoin de migrer davantage.

Article de référence

Renommer les colonnes de table dans Django3 https://qiita.com/holly0819/items/41f01096f59416b0d52b

Notes d'apprentissage pour la fonction migrations dans le framework Django (3) https://qiita.com/pumbaacave/items/8b6f8d96ddc7cc112827

Change column type with django migrations https://stackoverflow.com/questions/27385118/change-column-type-with-django-migrations

Recommended Posts

Personnalisez librement le modèle. Changer le nom de la variable et le nom du champ du modèle de l'application Django / Django Rest Framework ~ Comment refléter le déploiement sur heroku Memo
Déploiement Heroku de la première application Django à laquelle les débutants sont accros
Mémo de déploiement de Django × Postgresql sur Docker vers Heroku
Comment écrire une validation personnalisée dans Django REST Framework
Comment retourner les données contenues dans le modèle django au format json et les mapper sur le dépliant
[Django] Corrige le pluriel du nom du modèle sur l'écran de gestion
J'ai résumé comment changer les paramètres de démarrage de GRUB et GRUB2
Comment déployer une application Django sur heroku en seulement 5 minutes
Comment gérer les caractères déformés dans json de Django REST Framework
Comment obtenir le "nom" d'un champ dont la valeur est limitée par l'attribut choice dans le modèle Django
Comprendre la commodité de Django Rest Framework
Comment vérifier la version de Django
Déployer l'application Django sur Heroku [Partie 2]
Déployer l'application Django sur Heroku [Partie 1]
Changer l'ordre de PostgreSQL dans Heroku
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Un mémo sur la façon de surmonter le problème difficile de la capture d'effets avec l'IA