About a Single Selected Model Instance

Here is a simple trick how to make only one model instance selected:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from django.db import models
from django.utils.translation import gettext_lazy as _

def get_is_selected():
    return not HeaderImage.objects.filter(is_selected=True).exists()

class HeaderImage(models.Model):
    is_selected = models.BooleanField(
        _("Selected"), default=get_is_selected
    )
    ...

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        if self.is_selected:
            HeaderImage.objects.exclude(pk=self.pk).update(is_selected=False)

Tips and Tricks Programming Development Django 4.2 Django 3.2 Django 2.2