Skip to content

Instantly share code, notes, and snippets.

@amccloud
Created December 19, 2011 20:42
Show Gist options
  • Save amccloud/1498780 to your computer and use it in GitHub Desktop.
Save amccloud/1498780 to your computer and use it in GitHub Desktop.
from django.contrib.auth.models import User as AuthUser
from django.db.models.signals import post_save, post_delete
class BaseUser(AuthUser):
class Meta:
abstract = True
@classmethod
def __sync__(cls, from_user, to_user):
if not from_user.pk and to_user.pk:
to_user.delete()
return to_user
from_fields = from_user._meta.get_all_field_names()
to_fields = to_user._meta.get_all_field_names()
for field in set(from_fields) & set(to_fields):
setattr(to_user, field, getattr(from_user, field))
to_user.save()
return to_user
class User(BaseUser):
avatar = models.ImageField(upload_to='avatars/')
def sync_user(sender, instance, **kwargs):
other = AuthUser if sender == User else User
user = User.__sync__(instance, other(pk=instance.pk))
post_save.connect(sync_user, sender=AuthUser)
post_save.connect(sync_user, sender=User)
post_delete.connect(sync_user, sender=AuthUser)
post_delete.connect(sync_user, sender=User)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment