Je suis en train de développer une application interne pour l'entreprise pour laquelle je travaille, et je veux utiliser Django pour l'apprendre et Python en général, mais j'ai rencontré un peu de un accroc avec les PK. J'essaie d'émuler une partie de l'application actuelle où 2 tables MySQL, TaskCategory et Tasks, gèrent les tâches à effectuer. Chaque tâche appartient à une TaskCategory et chaque élément de TaskCategory a son propre numéro d'incrémentation distinct. Ainsi, si "Office" a 15 tâches, l'ajout d'une autre tâche fera son Task.taskid = 16, mais l'ajout d'une tâche à "Vehicles" fera le Tasks.taskid = 51, pas 17. Cela sera alors utilisé comme un numéro de suivi, par exemple la tâche Véhicules-51.Implémentation de clés primaires incrémentées distinctes dans Django
Cette incrémentation distincte a été réalisée en ayant une clé primaire composée dans les tâches consistant en taskcategoryid et taskid (qui s'incrémente automatiquement). D'ailleurs, Tasks.taskcategoryid n'est pas un FK (je ne pense pas qu'il puisse l'être de toute façon, car il fait partie du PK composé).
Comme Django n'aime pas plus de 1 colonne PK, j'ai eu du mal à reproduire cette fonctionnalité. J'ai essayé un unique_together de taskid (auto-incrémentant PK) et taskcategoryid (FK) et j'ai essayé d'avoir 2 colonnes à auto-incrémentation (id et taskid) mais vous ne pouvez pas avoir plus d'une colonne auto-incrémentante.
Est-il possible d'obtenir cette fonction d'incrémentation avec Django? Je préférerais le faire sans avoir à pirater le code source mais je le ferai si besoin est.
Ce que j'essaie finalement de faire, c'est d'augmenter le nombre de tâches de manière incrémentielle, mais d'avoir un total différent pour chaque catégorie de tâches qui s'incrémente automatiquement pour chaque ligne ajoutée. Comme l'attribution des différents numéros de tâche est faite par MySQL, et Django ne vous permet pas de créer des clés composées, je ne pense pas que Django soit adapté à mes besoins dans ce cas. Je suppose que je vais devoir utiliser un cadre plus souple tel que Pylons pour ce projet – Mark