Задать вопрос
rishatss
@rishatss
Simple Developer ^)

Как передавать в сигналы значение модели User?

Привет всем.
В данной ситуации в функцию create_profile_database()
Хочу передавать значение модели User который имеет username в эту функцию которая должна при post_save создавать базу данных с именем username где username в объекте Student cвязан один к одному.

Как быть?
Моя модель:
from django.db import models
from django.conf import settings
from django.db.models.signals import post_save
from django.db import connection


class Student(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        blank=True)
    first_name = models.CharField(max_length=80, blank=True)
    last_name = models.CharField(max_length=80, blank=True)
    slug = models.CharField(max_length=255, blank=True)
    created_at = models.DateTimeField('Datetime created')

    def __str__(self):
        return '%s %s' % (self.first_name, self.last_name)
# Dev
def create_profile_database(sender, **kwargs):
    if kwargs['created']:
        with connection.cursor() as cursor:
            cursor.execute("CREATE DATABASE username")
            row = cursor.fetchone()
        return row

post_save.connect(create_profile_database, sender=Student)

class Work(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    name = models.CharField(max_length=80, blank=True)
    description = models.CharField(max_length=255, blank=True)
    points = models.PositiveSmallIntegerField(blank=True)
    created_at = models.DateTimeField('Datetime created')

    def __str__(self):
        return '%s %s' % (self.name, self.points)

Или на гитхабе кому так удобней:
  • Вопрос задан
  • 1172 просмотра
Подписаться 3 Простой Комментировать
Решения вопроса 1
@JonGalt
Я у себя в проекте использую вот такую схему создания профайла при создании юзера:
from django.db.models.signals import post_save
from django.dispatch import receiver


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ...


    @receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)

    @receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.profile.save()

    def __str__(self):
        return self.user


class Meta:
verbose_name_plural = u'User profiles'
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы