сохранить экземпляр пользователя в другую модель после post_save django - PullRequest
0 голосов
/ 14 октября 2019

У меня есть две модели: CustomUser и Artist.
Я пытаюсь добиться того, чтобы при создании пользователя автоматически создавался художник.
Я не хочу добавлять поле OneToOneв модели художника. Я просто хочу заполнить эти поля: name, artist_category, artist_image и bio, используя post_save при создании CustomUser.

пользовательская модель пользователя

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)


 class Artist(models.Model):
     CHOICES = (
       (0, 'celebrities'),
       (1, 'singer'),
       (2, 'comedian'),
       (3, 'dancer'),
       (4, 'model'),
       (5, 'Photographer')
              )

      name = models.CharField(max_length=100)
      artist_category = models.IntegerField(choices = CHOICES, null=True)
      artist_image = models.ImageField(upload_to= 'media',null=True)
      bio = models.TextField(max_length = 500)

      def __str__(self):
         return self.name

1 Ответ

2 голосов
/ 14 октября 2019

EDITED

Использование Django Signals Post_save будет работать, поэтому просто добавьте значения в таблицу Artist через dict.

Экземпляр - это данные, которые сохраняются в модели CustomUser, так что вы можете получить определенные элементы данных посредством доступа к instance и создать запрос с необходимыми данными, которые можно передать в модель Artist.

Попробуйте:

def create_artist(sender, instance, created, **kwargs):
    if created:
        data = {
                'name' : instance.name,
                'artist_category' : instance.artist_category,
                'bio' : instance.bio
               }
        Artist.objects.create(**data)
post_save.connect(create_artist, sender=CustomUser)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...