Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16

Django2 добавить несколько пользователей в поле

28.03.2018, 10:43. Показов 2215. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс

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
class task(models.Model):
    text = models.CharField(null=True, blank=True, max_length=255)
    type = models.ForeignKey('task_type', on_delete=models.CASCADE)
    d_start = models.DateField(verbose_name="Дана Начала")
    d_end = models.DateField(verbose_name="Дана Окончания")
    status = models.ForeignKey('task_status', on_delete=models.CASCADE)
    task_par = models.ForeignKey(
        'self', 
        related_name='childs', 
        on_delete=models.CASCADE, 
        null=True, 
        blank=True,
        verbose_name="Дана Окончания"
        )
    project = models.ForeignKey('project', related_name="tasks", on_delete=models.CASCADE, null=True, blank=True)
    is_done = models.BooleanField(default=False)
    pubdate = models.DateField(auto_now_add=True)
 
    def __str__(self):
        return self.text
 
    class Meta:
        verbose_name = 'Задача'
        verbose_name_plural = 'Задачи'
нужно сюда вставить поле, в которое в админке можно будет вносить множество имен зарегистрированных пользователей

Как это можно сделать?

Добавлено через 3 минуты
пользователи у меня собираются в authorization

Python
1
2
3
4
5
6
7
8
9
10
11
12
class Profile(models.Model):
 
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    phone = models.CharField(max_length=30, null=True, blank=True)
    address = models.CharField(max_length=180, null=True, blank=True)
 
class UserNotices(models.Model):
 
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=150, blank=True)
    desc = models.CharField(max_length=250, blank=True)
    date = models.DateField(auto_now=True)
Добавлено через 1 час 34 минуты
по теме https://www.cyberforum.ru/pyth... 11182.html
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2018, 10:43
Ответы с готовыми решениями:

Добавить поле в несколько баз данных
Здравствуйте! В интернете полно примеров как добавить поле в таблицу:ALTER TABLE t_post ADD tags TEXT, ADD preview_text TEXT, ADD...

Добавить и извлечь несколько картинок в поле БД
Приветствую. Мне нужно создать 2 функции, одна из которых будет "заливать" картинки в БД, а другая - вытаскивать их. Фишка в том, что...

Добавить в программу возможность работы с несколькими паролями (как будто работают несколько пользователей)
Добавить в программу возможность работы с несколькими паролями (как будто работают несколько пользователей). При этом следует учесть, что...

7
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
28.03.2018, 13:37
Python
1
users = models.ManyToManyField(User, verbose_name='users')
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
29.03.2018, 07:40  [ТС]
Есть поле hits

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
class trouble(models.Model):
    title = models.CharField(null=True, max_length=100, verbose_name='Тема обращения')
    category = models.ForeignKey('trouble_category', on_delete=models.CASCADE, verbose_name='Категория')
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE)
    pubdate = models.DateField(auto_now_add=True)
    desc = models.CharField('Примечание', null=True, blank=True, max_length=150)
    content = models.TextField('Описание', null=True, blank=True, max_length=300)
    published = models.CharField(null=True, blank=True, max_length=200) # назначение неизвестно
    hits = models.CharField(
        null=True, 
        blank=True, 
        max_length=200
        ) # назначение неизвестно
    meta_desc = models.CharField(null=True, blank=True, max_length=200)
    meta_keys = models.CharField(null=True, blank=True, max_length=200)
    comments = models.CharField(null=True, blank=True, max_length=200) # назначение неизвестно
    lat = models.FloatField(null=True, blank=True)
    ing = models.FloatField(null=True, blank=True)
    addres = models.CharField(null=True, blank=True, max_length=200)
    status = models.ForeignKey('trouble_status',on_delete=models.CASCADE,null=True, blank=True, verbose_name='Статус')
    trouble_sendmail = models.CharField(null=True, blank=True, max_length=200) # назначение неизвестно
    trouble_lasteditdate = models.DateField(auto_now=True)
 
    def __str__(self):
        return "%s" % self.title
 
    class Meta:
        verbose_name = 'Обращение'
        verbose_name_plural = 'Обращения'
но нужно, чтобы в это поле вставлялось количество просмотров этой записи
как это сделать?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
29.03.2018, 08:00
Сделать это поле int, и в каждой вьюшке, где страница выводится:
Python
1
2
t.hits += 1
t.save()
где t - объект модели.

Добавлено через 31 секунду

Не по теме:

Можно было и новую тему создать

1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
29.03.2018, 08:41  [ТС]
Новую тему создавать не стал, потому что, это все звенья одной цепи
в систему включаю работу с жалобами (проблемами)
0
 Аватар для Wi0M
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
29.03.2018, 12:34
Только сначала исправь тип поля hits с CharField на IntegerField

Добавлено через 26 секунд
и default=0 поставь.
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
30.03.2018, 15:49  [ТС]
Делаю так:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
class TodoTask(models.Model):
    task = models.CharField(
        null=False,
        blank=False,
        max_length=500
    )
    type = models.ForeignKey(
        'TaskType',
        on_delete=models.CASCADE
    )
    status = models.ForeignKey(
        'TaskStatus',
        on_delete=models.CASCADE
    )
    result = models.TextField(
        verbose_name='примечание к результатам',
        max_length=2000,
        null=True
    )
    parent = models.ForeignKey(
        'self',
        null=True,
        blank=True,
        on_delete=models.CASCADE,
        verbose_name='Родитель'
    )
    helper = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        verbose_name='Наблюдатель'
    )
    time = models.DateTimeField(
        auto_now_add=True
    )
    dstart = models.DateField(
        verbose_name='Дата начала'
    )
    dend = models.DateField(
        verbose_name='Дата окончания'
    )
    category = models.ForeignKey(
        'TodoCategory',
        related_name='TaskCategory',
        on_delete=models.CASCADE,
        null=True,
        blank=True,
    )
    created_by = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        default=1,
        on_delete=models.CASCADE
    )
    forwho = models.ManyToManyField(
        settings.AUTH_USER_MODEL,
        verbose_name='Ответственный'
    )
    trouble = models.ForeignKey(  # если есть troble.troubles.app many
        'troubles.trouble',
        on_delete=models.CASCADE,
        related_name='Ссылка на trouble',
        null=True,
        blank=True
    )
    complete = models.BooleanField(
        default=False
    )
 
    def get_date_diff(self):
        return (self.dstart - self.dend).days
 
    def __str__(self):
        return "%s" % self.task
 
    class Meta:
        verbose_name = 'Задача'
        verbose_name_plural = 'Задача'
Получаю вот такую ошибку:

HTML5
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
ERRORS:
todo.TodoTask.created_by: (fields.E304) Reverse accessor for 'TodoTask.created_by' clashes with reverse accessor for 'TodoTask.forwho'.
 
    HINT: Add or change a related_name argument to the definition for 'TodoTask.created_by' or 'TodoTask.forwho'.
todo.TodoTask.created_by: (fields.E304) Reverse accessor for 'TodoTask.created_by' clashes with reverse accessor for 'TodoTask.helper'.
 
    HINT: Add or change a related_name argument to the definition for 'TodoTask.created_by' or 'TodoTask.helper'.
todo.TodoTask.forwho: (fields.E304) Reverse accessor for 'TodoTask.forwho' clashes with reverse accessor for 'TodoTask.created_by'.
 
    HINT: Add or change a related_name argument to the definition for 'TodoTask.forwho' or 'TodoTask.created_by'.
todo.TodoTask.forwho: (fields.E304) Reverse accessor for 'TodoTask.forwho' clashes with reverse accessor for 'TodoTask.helper'.
 
    HINT: Add or change a related_name argument to the definition for 'TodoTask.forwho' or 'TodoTask.helper'.
todo.TodoTask.helper: (fields.E304) Reverse accessor for 'TodoTask.helper' clashes with reverse accessor for 'TodoTask.created_by'.
 
    HINT: Add or change a related_name argument to the definition for 'TodoTask.helper' or 'TodoTask.created_by'.
todo.TodoTask.helper: (fields.E304) Reverse accessor for 'TodoTask.helper' clashes with reverse accessor for 'TodoTask.forwho'.
 
    HINT: Add or change a related_name argument to the definition for 'TodoTask.helper' or 'TodoTask.forwho'.
todo.TodoTask.trouble: (fields.E306) The name 'Ссылка на trouble' is invalid related_name for field TodoTask.trouble
 
    HINT: Related name must be a valid Python identifier or end with a '+'
troubles.ForWho.forwho: (fields.E303) Reverse query name for 'ForWho.forwho' clashes with field name 'TodoTask.forwho'.
    
HINT: Rename field 'TodoTask.forwho', or add/change a related_name argument to the definition for field 'ForWho.forwho'.

а задача:

created_by - кто создал
created_by - вписать любого юзера из зарегистрированных в системе
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
30.03.2018, 18:05
Если задаать связь между моделями с помощью ForeignKey:

Code
1
2
3
4
5
6
class User(Model):
    ...
 
class Trouble(Model):
    created_by = models.ForeignKey(User)
    ...
Вы можете из Trouble обратиться к User - trouble.created_by
Но Django создает автоматически и обратную связь, чтобы можно было из User обратиться к Trouble - user.trouble_set

Имя этой обратной связи можно задать через параметр related_name

Code
1
2
class Trouble(Model):
    created_by = models.ForeignKey(User, related_name='mytroubles)
Теперь связь от User к Trouble будет выглядеть как user.mytroubles

Если создать модель так:
Code
1
2
3
class Trouble(Model):
    created_by = models.ForeignKey(User)
    forwho = models.ForeignKey(User)
Здесь две связи на User и в модели User django будет создавать две обратные связи на Trouble, и называться они будут одинаково - trouble_set. Поэтому выдается ошибка типа Reverse accessor for 'TodoTask.created_by' clashes with reverse accessor for 'TodoTask.forwho'.

Чтобы исправить это, нужно явно им задать разные имена related_name

Code
1
2
3
class Trouble(Model):
    created_by = models.ForeignKey(User, related_name='mytroubles')
    forwho= models.ForeignKey(User, related_name='forwho_set')
Теперь модель Trouble доступна из User через user.mytroubles и user.forwho_set

related_name='Ссылка на trouble' - так нельзя, related_name должно быть валидным идентификатором питон

Можно также указать related_name='+', тогда django вообще не будет создавать обратную связь
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.03.2018, 18:05
Помогаю со студенческими работами здесь

Как добавить в поле формы несколько значений?
У меня есть модальное окно, в котором существуют некоторые данные (4 поля таблицы), как вывести их в одно строку на странице? А также, не...

Возможно ли добавить в одно поле несколько внешних ключей
Есть поля в базе: номер заказа, состав заказа, дата заказа, дата доставки, общая сумма заказа, общий размер скидки заказа, ФИО клиента...

Как в одно поле добавить несколько значений из других полей
Как в одно поле добавить несколько значений из других полей. К примеру у меня есть магазин и 1 покупец может оформить несколько товаров....

Создать поле для входа разных пользователей. Обычное текстовое поле, куда вы вводите свое имя и кнопка "войти"
Только после этого появляется основное поле для ввода текста. При этом, для каждого "пользователя" редактируемый текст должен...

Как мне программно добавить поле в таблице и сделать поле ключевым
1. Как мне программно добавить поле в таблице и сделать поле ключевым? 2. Как программно организовать связь данных между двумя таблицами?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru