kopia lustrzana https://github.com/djpeacher/django-projects
feat: added user_solo
rodzic
70d268d742
commit
8a0c2b89ee
|
@ -51,6 +51,7 @@ INSTALLED_APPS = [
|
|||
'allauth.socialaccount',
|
||||
'recipes',
|
||||
'neapolitan',
|
||||
'user_solo',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
|
|
@ -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)
|
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class UserSoloConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'user_solo'
|
|
@ -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
|
Ładowanie…
Reference in New Issue