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

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

21.05.2021, 11:06. Показов 1326. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru