Unique BooleanField valeur dans Django?

Suppose que mon models.py c'est comme si:

class Character(models.Model):
    name = models.CharField(max_length=255)
    is_the_chosen_one = models.BooleanField()

Je ne veux que l'un de mes Character instances ont is_the_chosen_one == True et tous les autres d'avoir is_the_chosen_one == False . Comment puis-je assurer au mieux cette contrainte d'unicité est-elle respectée?

Top marques des réponses qui prennent en compte l'importance du respect de la contrainte à la base de données, le modèle et l' (admin), les niveaux de forme!

  • Bonne question. Je suis aussi curieux de savoir si il est possible de mettre en place une telle contrainte. Je sais que si vous avez simplement une contrainte unique, vous vous retrouverez avec seulement deux lignes dans votre base de données 😉
  • Pas nécessairement: si vous utilisez un NullBooleanField, alors vous devriez être en mesure d'avoir: (un Vrai, un Faux, un certain nombre de valeurs Null).
  • Selon ma recherche, @semente réponse, tient compte de l'importance du respect de la contrainte à la base de données, le modèle et l' (admin), les niveaux de forme alors qu'il fournit une excellente solution, même pour un through table de ManyToManyField qui a besoin d'un unique_together contrainte.