Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 05.02.2021
Сообщений: 21

Расширение модели User

21.05.2021, 11:06. Показов 1323. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Пытаюсь разобраться. Сделал регистрацию и авторизацию пользователей с помощью User. Все работает. Теперь хочу расширить модель, добавив некоторые поля.
Не знаю правильно или нет, но хотелось бы использовать сигналы. Думал не возникнет проблем, но постоянно что-то мешает. ))
Вот модель
Python
1
2
3
4
class Profile(models.Model):
    user = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE)
    balance = models.DecimalField(max_digits=7, decimal_places=2, default=0, blank=True)
    status = models.CharField(max_length=50, default='', blank=True)
Сигнал
Python
1
2
3
4
def func(sender, instance, **kwargs):
    print(sender)
    print(instance)
post_save.connect(func, User)
Для начала хотелось бы понять почему принты в func отображаются по 2 раза и почему этот код работает в файле models.py, а, например, в signals.py нет.
Когда регистрируюсь как, допустим, Oleg, то в консоли печатается
<class 'django.contrib.auth.models.User'>
Oleg
<class 'django.contrib.auth.models.User'>
Oleg
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2021, 11:06
Ответы с готовыми решениями:

Расширение модели User. "got not an unexpected keyword argument 'user'"
Здравствуйте, пытаюсь расширить дефолтную модель User следующим образом. class Profile(models.Model): user =...

Расширение профиля User в Django
Добрый всем день! Как лучше расширить профиль юзера в джанго? Варианты: через наследование или ассоциацию (OneToOne). Через наследование...

Связь модели с моделью User Django
Подскажите пожалуйста, сделал проект админки, создал свою модель: class NetworkChange(models.Model): &quot;&quot;&quot; ...

2
3 / 2 / 1
Регистрация: 22.08.2019
Сообщений: 17
28.05.2021, 14:50
Я так привязал, года полтора без проблем.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Profile(models.Model):
    # Штатное, сотрудники
 
    USER_RIGHTS = (
        (0, ''),
        (1, '1 Чтен'),
        (2, '2 Запс'),
        (5, '5 ЗЧуж'),
    )
 
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    department = models.ForeignKey(Main_department, on_delete=models.PROTECT, null=True, verbose_name='Отдел')
    role = models.ForeignKey(Main_role, on_delete=models.PROTECT, null=True, verbose_name='Должность')
    fio_full = models.CharField(max_length=60, default='', verbose_name='ФИО_Полное')
    fio = models.CharField(max_length=40, default='', verbose_name='ФИО')
    telephone = models.CharField(max_length=15, default='', verbose_name='Телефон')
    email = models.CharField(max_length=40, default='')
    grp_contract = models.IntegerField(choices=USER_RIGHTS, default=0, verbose_name='Договор')
 
    def __str__(self):
        return self.fio
 
    class Meta:
        verbose_name = 'Пользователь сведения'
        verbose_name_plural = 'Пользователи сведения'
 
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance, id=instance.id)
 
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()
0
26 / 36 / 15
Регистрация: 15.01.2017
Сообщений: 311
28.05.2021, 17:51
models.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from django.db import models
from django.contrib.auth.models import User
from django.utils.timezone import now
from core.models import City
 
 
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    city_user_choice = models.ForeignKey(City, null=True, on_delete=models.CASCADE)
 
    First_Name = models.CharField(default="First Name", max_length=30)
    Last_Name = models.CharField(default="Last Name", max_length=30)
    Year = models.IntegerField(default="18")
    image = models.ImageField(default="default.jpg", upload_to="profile_image")
    job = models.CharField(max_length=100)
    bio = models.TextField()
 
    def __str__(self):
        return self.user.username
 
class RegistrationForEvent(models.Model):
    First_Name = models.CharField(max_length=30)
    Last_Name = models.CharField(max_length=30)
    Year = models.IntegerField(default="18")
    timestamp = models.DateTimeField(default=now)
signals.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile
 
 
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
 
 
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2021, 17:51
Помогаю со студенческими работами здесь

Кастомизация модели User
Django 1.10.2. Пытаюсь освоить кастомизацию модели User. Вот дока:...

расширение модели
Здравствуйте, есть таб. &quot;Курс&quot; и есть таб. &quot;Уровень_сложности&quot;. Они связаны многие-ко-многим( у каждого из курсов свой набор уровней...

Расширение поведения модели
Добрый день. Вроде бы задача миллион раз решалась, но что-то не соображу как решить её элегантно. Итак, есть модель данных...

Расширение модели Identity 2.0
Задача состоит в том, чтобы несколько разных сущностей (Клиенты, Рабочие, Администраторы) имели доступ к приложению посредством...

Можно ли организовать расширение partial-класса, чтобы не менять исходный класс в модели? (EF)
Приветствую! В проекте ASP.NET MVC есть сгенерированная с помощью Entity Framework (.edmx) модель с классами, соответствующими...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru