J'ai appris Django récemment. Maintenant, sur l'un des projets que je travaille, je dois ajouter un nouveau champ, is_core_administrator code> au modèle
userprofile code>, qui définira l'utilisateur le plus ancien en tant qu'administrateur principal. Je dois mettre à jour ce champ pour tous les utilisateurs avec la migration.
Y a-t-il un moyen de faire cela? Je veux dire, lorsque je fais des migrations, est-il possible de mettre à jour ce champ à vrai pour l'utilisateur le plus ancien et faux pour le repos. La recherche de l'utilisateur le plus ancien ne sera pas difficile car nous avons déjà un autre champ
Datejoined code>. Je veux juste mettre à jour le champ correspondant sur la création de la migration. P>
3 Réponses :
Bien sûr, il suffit d'utiliser migrations.runsql code>
ou migrations.runpython code>
en fonction de vos besoins. p>
Ce dernier pourrait être plus facile à utiliser dans ce cas, mais vous devriez être capable de le faire avec une seule inscription code> Mettre à jour code> SQL. p>
Le fichier de migration est créé après avoir appliqué les migrations correctes! J'ai ajouté un script pour modifier le champ is_core_administrator code> (pour l'utilisateur le plus ancien), dans un nouveau fichier créé en faisant des migrations. Comment ce script va-t-il courir à nouveau? Est-ce que j'ai de nouveau besoin d'appliquer des migrations? Demander cela parce que cela ne modifie pas ce champ
is_core_administrator code>. Je suis curieux, quand ce script serait-il exécuté? J'ai utilisé Runpython pour être plus clair.
Vous pouvez créer un fichier de migration vide avec python manage.py makemigrations myApp --Name Seed_core_administrator --Empty code>, puis ajouter le
runpython code> action là-bas. Ensuite, exécutez simplement
python manage.py migrate code>.
Vous pouvez le faire à l'aide de l'option RunpyThon dans les migrations Django.
Créer une fonction en haut du fichier de migration. P>
RunPython(set_default_values)
Veuillez clarifier votre cas d'utilisation. Je vois que vous avez trois options:
class UserProfile(models.Model): ... ... is_core_administrator=models.BooleanField(default=False) def save(self, force_insert=False, force_update=False, using=None, update_fields=None): if not UserProfile.objects.exists(): self.is_core_administrator=True self.etiket=self.woo_name return models.Model.save(self, force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)