8
votes

Incrément automatique une valeur dans Django par rapport à la précédente

Y a-t-il un moyen d'autocrament un champ en ce qui concerne la précédente ... E.g Si l'enregistrement précédent a la valeur 09-0001, le prochain enregistrement doit être attribué 09-0002 et donc une ... des idées? Je pense à remplacer la méthode de sauvegarde, mais comment exactement je ne suis pas si sûr


0 commentaires

3 Réponses :


1
votes

autofield est le type de champ que Django utilise pour la propriété de la classe de base de modèle '' ID 'de la classe de base, mais vous pouvez l'utiliser pour des champs d'auto-interprétation supplémentaires.

Je ne pense pas que vous puissiez faire un formatage comme dans votre exemple, mais une bonne approche serait de créer un type de champ personnalisé qui remplace la méthode Save () pour effectuer le formatage souhaité.


2 commentaires

Je verrai si je peux faire ça ... Je pensais qu'il y avait un moyen plus facile d'essayer de récupérer la valeur de l'enregistrement précédent pour ce domaine puis de l'ajouter à 1. De toute façon merci


Un seul autofield par modèle est actuellement autorisé dans Django et il est utilisé pour le champ primaire.



10
votes

Django ne vous laissera pas avoir plus d'un autofield dans un modèle et vous en avez déjà un pour votre clé principale. Vous devrez donc remplacer une sauvegarde et aura probablement besoin de regarder en arrière à la table pour déterminer quoi d'incrémenter.

quelque chose comme ceci: xxx

Notez que, sans aucune sorte de verrouillage de votre méthode de sauvegarde, vous pouvez rencontrer un problème de concurrence (deux threads essayant de stocker les mêmes valeurs. en code et numéro).


2 commentaires

Pour réparer des problèmes de concurrence, vous pouvez utiliser top = product.Object.select_for_update (nowité = true) .Order_by ('- CO de', '- Number') [0]


Oui, utilisez select_for_update () , mais assurez-vous que votre RDBMS prend en charge la ligne de verrouillage en ligne en premier! (récent mysql et postgres font).



1
votes

dans SQL: xxx

dans django: xxx

Lors de l'enregistrement, le code sera augmenté automatiquement.


0 commentaires