diff --git a/drakul/users/forms.py b/drakul/users/forms.py index 0bac7cc..9bb1884 100644 --- a/drakul/users/forms.py +++ b/drakul/users/forms.py @@ -8,5 +8,3 @@ class CharacterForm(ModelForm): model = Character fields = ["name", "klass", "role"] - def clean_name(self): - return self.cleaned_data["name"].capitalize() diff --git a/drakul/users/migrations/0001_initial.py b/drakul/users/migrations/0001_initial.py index 8a07573..7ad08ca 100644 --- a/drakul/users/migrations/0001_initial.py +++ b/drakul/users/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 2.2.6 on 2019-10-25 01:58 +# Generated by Django 2.2.6 on 2019-10-25 13:23 from django.conf import settings import django.contrib.auth.validators @@ -55,7 +55,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='user', name='main', - field=models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='users.Character'), + field=models.OneToOneField(blank=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='users.Character'), ), migrations.AddField( model_name='user', diff --git a/drakul/users/models.py b/drakul/users/models.py index 7c150d0..29ba2dd 100644 --- a/drakul/users/models.py +++ b/drakul/users/models.py @@ -12,22 +12,6 @@ class UserManager(DjangoUserManager): avg_attendance=Avg("characters__raid_responses__attendance") ) - @transaction.atomic - def _create_user(self, username, email, password, **extra_fields): - if "main" not in extra_fields: - main = Character.objects.create( - user=None, - name=username, - klass=Character.WARRIOR, - role=Character.DAMAGE - ) - main.save() - extra_fields["main"] = main - user = super()._create_user(username, email, password, **extra_fields) - extra_fields["main"].user = user - extra_fields["main"].save() - return user - class User(AbstractUser): objects = UserManager() @@ -38,7 +22,8 @@ class User(AbstractUser): main = models.OneToOneField( "Character", related_name="+", - on_delete=models.PROTECT + on_delete=models.PROTECT, + blank=True ) class Meta: @@ -48,6 +33,22 @@ class User(AbstractUser): if hasattr(self, "main") and self.main.user != self: raise ValidationError({"main": "Main character must be owned by user."}) + @transaction.atomic + def save(self, *args, **kwargs): + if not hasattr(self, "main"): + self.main = Character.objects.create( + user=None, + name=self.username, + klass=Character.WARRIOR, + role=Character.DAMAGE + ) + self.main.save() + + user = super().save(*args, **kwargs) + self.main.user = self + self.main.save() + return user + def avg_attendance(self): return self.avg_attendance @@ -107,5 +108,8 @@ class Character(models.Model): class Meta: ordering = ["name"] + def clean(self): + self.name = self.name.capitalize() + def __str__(self): return self.name