-
-
Save peterfarrell/38984d6aedb713629953 to your computer and use it in GitHub Desktop.
Singleton Django Model
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Written by Senko Rasic <[email protected]> | |
# Released into Public Domain. Use it as you like. | |
from django.db import models | |
class SingletonModel(models.Model): | |
"""Singleton Django Model | |
Ensures there's always only one entry in the database, and can fix the | |
table (by deleting extra entries) even if added via another mechanism. | |
Also has a static load() method which always returns the object - from | |
the database if possible, or a new empty (default) instance if the | |
database is still empty. If your instance has sane defaults (recommended), | |
you can use it immediately without worrying if it was saved to the | |
database or not. | |
Useful for things like system-wide user-editable settings. | |
""" | |
class Meta: | |
abstract = True | |
def save(self, *args, **kwargs): | |
""" | |
Save object to the database. Removes all other entries if there | |
are any. | |
""" | |
self.__class__.objects.exclude(id=self.id).delete() | |
super(SingletonModel, self).save(*args, **kwargs) | |
@classmethod | |
def load(cls): | |
""" | |
Load object from the database. Failing that, create a new empty | |
(default) instance of the object and return it (without saving it | |
to the database). | |
""" | |
try: | |
return cls.objects.get() | |
except cls.DoesNotExist: | |
return cls() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment