feat: added user_solo

main
Jonathan Peacher 2023-06-22 15:49:37 -05:00
rodzic 70d268d742
commit 8a0c2b89ee
Nie znaleziono w bazie danych klucza dla tego podpisu
5 zmienionych plików z 50 dodań i 0 usunięć

Wyświetl plik

@ -51,6 +51,7 @@ INSTALLED_APPS = [
'allauth.socialaccount',
'recipes',
'neapolitan',
'user_solo',
]
MIDDLEWARE = [

Wyświetl plik

@ -0,0 +1,22 @@
# django-user-solo
Proof of concept `UserSingletonModel` that creates an singleton instance for each user.
Inspired by [django-solo](https://github.com/lazybird/django-solo) ❤️
```python
from user_solo.models import UserSingletonModel
class Preference(UserSingletonModel):
flag = models.BooleanField(default=True)
# All users will have .preference
user = User.objects.get(...)
user.preference # get_or_create
```
### TODO
- Settings
- Caching
- Signals (create when user created)

Wyświetl plik

Wyświetl plik

@ -0,0 +1,6 @@
from django.apps import AppConfig
class UserSoloConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'user_solo'

Wyświetl plik

@ -0,0 +1,21 @@
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.db import models
from django.db.models.fields.related_descriptors import ReverseOneToOneDescriptor
from django.db.models.fields.related import OneToOneField
class UserSingletonDescriptor(ReverseOneToOneDescriptor):
def __get__(self, user, cls=None):
try:
return super().__get__(user, cls)
except ObjectDoesNotExist:
return self.related.related_model.objects.create(user=user)
class UserSingletonField(OneToOneField):
related_accessor_class = UserSingletonDescriptor
class UserSingletonModel(models.Model):
user = UserSingletonField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Meta:
abstract = True