Project

General

Profile

Development #71619

Dépréciation: django 3.1 a déprécié NullBooleanField et mis JSONField dans les champs de modèle génériques

Added by Benjamin Dauvergne 16 days ago. Updated 8 days ago.

Status:
Résolu (à déployer)
Priority:
Normal
Category:
-
Target version:
-
Start date:
23 November 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No


Files

Associated revisions

Revision 5788e9f0 (diff)
Added by Benjamin Dauvergne 8 days ago

NullBooleanField is deprecated since Django 3.1 (#71619)

It must be replaced by BooleanField(null=True).

Revision 3fcbe219 (diff)
Added by Benjamin Dauvergne 8 days ago

django.contrib.postgres's JSONField is deprecated (#71619)

History

#1

Updated by Valentin Deniaud 16 days ago

Note, c'est géré par django-upgrade (https://github.com/adamchainz/django-upgrade#django-31), tu peux utiliser ça pour faire les adaptations automatiquement si tu veux.

#2

Updated by Benjamin Dauvergne 16 days ago

Valentin Deniaud a écrit :

Note, c'est géré par django-upgrade (https://github.com/adamchainz/django-upgrade#django-31), tu peux utiliser ça pour faire les adaptations automatiquement si tu veux.

Par bonne volonté j'ai essayé dans une branche sur le coté mais :
  • ça ne corrige pas les migrations
  • ça n'ajoute pas de code rétro-compatibilité pour 2.2
  • dans le cas de UniqueBooleanField pour lequel je n'ai pas voulu chercher s'il était encore nécessaire ça ne fait rien
  • ça n'a pas ajouter un blank=True qui était nécessaire à user_can_reset_password

Je ne pense pas qu'on puisse vraiment utiliser django-upgrade tant qu'on aura besoin de supporter plusieurs versions en parallèle (et pour les migrations je ne comprends pas vraiment pourquoi il ne corrige pas, là l'outil est juste inutile), c'est souvent casse-gueule.

#4

Updated by Valentin Deniaud 16 days ago

Benjamin Dauvergne a écrit :

  • ça ne corrige pas les migrations

It's a feature je pense, « Transforms the NullBooleanField() model field to BooleanField(null=True). Ignores usage in migration files, since Django kept the old class around to support old migrations. »

  • ça n'ajoute pas de code rétro-compatibilité pour 2.2

Oui mais ce code n'est nécessaire que parce que tu prends de l'avance, ce n'est pas le principe de django-upgrade qui reformate seulement une fois que le support de 2.2 n'est plus nécessaire :)

  • ça n'a pas ajouter un blank=True qui était nécessaire à user_can_reset_password

Ouep c'est le genre de chose à voir à la main, effectivement.

Et remarque à propos du patch, il faut mettre des explicites if django.VERSION < (3, 1): plutôt que gérer les ImportError, ça permettra à... django-upgrade de les virer automatiquement.

#5

Updated by Benjamin Dauvergne 16 days ago

Valentin Deniaud a écrit :

  • ça n'a pas ajouter un blank=True qui était nécessaire à user_can_reset_password

Ouep c'est le genre de chose à voir à la main, effectivement.

Et remarque à propos du patch, il faut mettre des explicites if django.VERSION < (3, 1): plutôt que gérer les ImportError, ça permettra à... django-upgrade de les virer automatiquement.

Je prends de l'avance parce que recevoir 20 lignes de warnings lors d'un make-migrations c'est fatiguant :) C'est pareil pour les autres patchs concernant les warnings, on ne voit plus les erreurs.

Et remarque à propos du patch, il faut mettre des explicites if django.VERSION < (3, 1): plutôt que gérer les ImportError, ça permettra à... django-upgrade de les virer automatiquement.

Ok je vais faire ça.

#6

Updated by Benjamin Dauvergne 15 days ago

Je n'ai pas trouvé où placé des imports conditionnés sans pylint ne chouine d'une manière ou d'une autre, ça s'est fini en pylint: disable=ungrouped-imports sur une ligne à chaque fois, le moins couteux.

#7

Updated by Valentin Deniaud 8 days ago

  • Status changed from Solution proposée to Solution validée

OK mais de préférence sans 0003, je ne sais pas ce que ça fait là.

#8

Updated by Benjamin Dauvergne 8 days ago

  • Status changed from Solution validée to Résolu (à déployer)
commit 3fcbe2198c8ef41fc4c74d3397c3d24e272ba6f2
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Wed Nov 23 15:27:27 2022 +0100

    django.contrib.postgres's JSONField is deprecated (#71619)

commit 5788e9f0cd71047fbddbb7772dc6b6eb92f11c1e
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Wed Nov 23 15:22:07 2022 +0100

    NullBooleanField is deprecated since Django 3.1 (#71619)

    It must be replaced by BooleanField(null=True).

Also available in: Atom PDF