Je veux une table qui ne peut avoir qu'un seul enregistrement. Ma solution actuelle est:Meilleure façon de créer une table Singleton dans Django/MySQL
class HitchingPost(models.Model):
SINGLETON_CHOICES = (('S', 'Singleton'),)
singleton = models.CharField(max_length=1, choices=SINGLETON_CHOICES, unique=True, null=False, default='S');
value = models.IntegerField()
def __unicode__(self):
return u"HitchingPost" # only ever one record
C'est un peu laid, et ne l'applique pas la contrainte au niveau MySQL.
Existe-t-il une meilleure solution?
Existe-t-il un type de champ MySQL qui ne peut avoir qu'une valeur (boolean est le plus petit que j'ai trouvé, ayant deux possibilités)? Un chiffre de base 0 est le plus proche de l'expression du concept.
Existe-t-il un nom mathématique pour une telle chose?
Merci,
Chris.
P.S. SQL généré est:
CREATE TABLE `appname_hitchingpost` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`singleton` varchar(1) NOT NULL UNIQUE,
`value` integer NOT NULL
)
;
'' Y at-il un nom mathématique pour une telle chose? '' - une constante? –
Il impose une contrainte au niveau MySQL. Essayez par exemple 'HitchingPost.objects.create (valeur = 12)' suivi par ex. 'HitchingPost.objects.create (valeur = 13)'. Si vous n'obtenez pas IntegrityError, vous avez un problème plus large. –
@Tomasz - oui, il renforce l'intégrité de la couche Django, mais la table MySQL n'a pas de contraintes similaires. Une application non-Django pourrait insérer valeur = 13 sans problème. Je vais creuser le SQL qu'il crée, si vous êtes intéressé. – fadedbee