У меня есть этот портал, на котором пользователь может зарегистрироваться как исполнитель, и я хочу сохранить этого пользователя на странице категории другого исполнителя после регистрации, например, если пользователь регистрируется как модель, он автоматически сохраняется на моделях исполнителей, поэтому его можно получить на странице художников
artist models.py:
from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin
from django.utils import timezone
from django.contrib.auth import get_user_model
from django.db.models.signals import post_save
from django_countries.fields import CountryField
from phonenumber_field.modelfields import PhoneNumberField
class artist(models.Model):
CHOICES = (
(0, 'celebrities'),
(1, 'singer'),
(2, 'comedian'),
(3, 'dancer'),
(4, 'model'),
(5, 'Photographer')
)
artist_name = models.CharField(max_length = 50)
artist_type = models.IntegerField(choices = CHOICES)
artist_image = models.ImageField(upload_to= 'media')
description = models.TextField(max_length = 500)
def __str__(self):
return self.artist_name
Диспетчер пользовательских настроек
class UserManager(BaseUserManager):
def _create_user(self, email, password, is_staff, is_superuser, **extra_fields ):
if not email:
raise ValueError('user must have email address')
now = timezone.now()
email = self.normalize_email(email)
user = self.model(
email = email,
is_staff = is_staff,
is_active = True,
is_superuser = is_superuser,
last_login=now,
date_joined = now,
**extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self,email, password, **extra_fields):
return self._create_user(email, password, False, False, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
user = self._create_user(email, password, True, True, **extra_fields)
user.save(using=self._db)
return user
Модель пользовательских настроек
class CustomUser(AbstractBaseUser, PermissionsMixin):
artist_choice = [
(0, 'celebrities'),
(1, 'singer'),
(2, 'comedian'),
(3, 'dancer'),
(4, 'model'),
(5, 'Photographer')
]
Artist_Category = models.IntegerField(choices=artist_choice, null=True)
Mobile_Number = PhoneNumberField(null=True)
city = models.CharField(blank=True, max_length=50)
bio = models.TextField(blank=True)
email = models.EmailField(max_length=100, unique=True)
name = models.CharField(max_length=100)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=False)
last_login=models.DateTimeField(null=True, blank=True)
date_joined = models.DateTimeField(auto_now_add=True)
country = CountryField()
USERNAME_FIELD = 'email'
EMAIL_FIELD='email'
REQUIRED_FIELDS=[]
objects=UserManager()
def get_absolute_url(self):
return "/users/%i/" % (self.pk)
views.py:
def talent(request, artist_type):
artists = artist.objects.filter(artist_type = artist_type)
context = {
'aka': artists
}
return render(request, 'main_site/talent.html', context)
forms.py:
class RegistrationForm(UserCreationForm):
CHOICES = (
(0, 'celebrities'),
(1, 'singer'),
(2, 'comedian'),
(3, 'dancer'),
(4, 'model'),
(5, 'Photographer')
)
#Artist_Category = forms.ChoiceField(choices=CHOICES)
#bio = forms.CharField(widget=forms.Textarea,label = 'something about yourself')
class Meta:
model = CustomUser
fields = ('email','name','Mobile_Number','Artist_Category','country','bio','city')
я также добавил в панель администратора модели для создания художника
и когда пользователь регистрируется, он автоматически сохраняется на этой модели