С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для artem78
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729

Начальное заполнение поля модели по условию

01.06.2019, 00:32. Показов 3854. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, что не так?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class WritOfExecutionTemplate(AbstractBaseModel, WhoDidItMixin):   
    def get_poa1_from_plaint(self):
        if any_condition():
            poa = self.plaint.power_of_attorney
        else:
            poa = None
        return poa
 
    power_of_attorney = models.ForeignKey(
        verbose_name=_('power of attorney'),
        to='ImportedDocument',
        on_delete=models.PROTECT,
        #null=True,
        #blank=True,
        related_name='+',
        default=get_poa1_from_plaint,
    )
get_poa1_from_plaint() missing 1 required positional argument: 'self'
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.06.2019, 00:32
Ответы с готовыми решениями:

Заполнение поля в модели в админ панели
Здравствуйте! Хотел бы задать такой вопрос. У меня есть таблица которая называется ust и содержит перечень установок. Есть таблица pers,...

Заполнение поля по условию
Есть три таблицы Контрагент с полями : Код, Наименование, МаскаВх, МаскаИсх, Тип корреспонденции :Код,Тип письма, Письма :Контрагент...

Заполнение поля одной модели данными с другой
Добрый день. Разрабатываю приложение для Аэропорта. Есть две модели: public class Flight { public...

10
 Аватар для Wi0M
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
03.06.2019, 23:50
очевидно что get_poa1_from_plaint вызывается без аргументов. метод get_poa1_from_plaint должен быть static
0
 Аватар для artem78
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
03.06.2019, 23:54  [ТС]
Цитата Сообщение от Wi0M Посмотреть сообщение
метод get_poa1_from_plaint должен быть static
Ну и как мне потом текущий объект в методе получить?
0
 Аватар для Wi0M
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
04.06.2019, 00:14
как по мне, крайне нелогично делать поле защищенным и при этом писать ему None (иногда). Сделай тогда on_delete=SET_NULL. default=None и присваивай значение если нужно.

Добавлено через 2 минуты
тем более конструкция мозговыносящая. ты при создании объекта пытаешься получить поле этого объекта. ты понимаешь что это не будет работать так как ты хочешь? более того если ты не хочешь переписывать код условия (например добавление объекта есть в разных местах), что есть правильная идея. то ты можешь назначить сигнал на событие pre_save. в документации более подробно
Python
1
from django.db.models.signals import post_save, pre_save
1
 Аватар для artem78
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
04.06.2019, 00:39  [ТС]
Wi0M, Расскажу более детально, чего я хочу (жаль, что в первом сообщении этого не сделал). Есть у меня две модели: Plaint (Иск) и WritOfExecutionTemplate (Шаблон). Шаблон хранит связь с иском. Шаблон может быть создан в редакторе иска через TabularInline. Так вот, когда пользователь нажимает на кнопку в иске "добавить новый шаблон", создаётся новая сущность шаблона со связанным текущим иском. Мне нужно, чтобы также по некоторому условию подтягивались 2 доверенности (power of attorney) из связанного иска. Пользователь должен иметь возможность изменить их до того, как шаблон будет сохранён в БД.

А теперь код моделек:
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
class AbstractGeneratedCaseDocument(AbstractBaseModel):
    class Meta:
        abstract = True
 
    case = models.ForeignKey(
        verbose_name=_('case'),
        to='Case',
        on_delete=models.PROTECT,
    )
    power_of_attorney = models.ForeignKey(
        verbose_name=_('power of attorney'),
        to='ImportedDocument',
        on_delete=models.PROTECT,
        null=True,
        blank=True,
        related_name='+',
    )
    power_of_attorney_2 = models.ForeignKey(
        verbose_name=_('power of attorney') + ' 2',
        to='ImportedDocument',
        on_delete=models.PROTECT,
        null=True,
        blank=True,
        related_name='+',
    )
    
    
class Plaint(AbstractGeneratedCaseDocument):
    pass
    
 
class WritOfExecutionTemplate(AbstractBaseModel, WhoDidItMixin):
    plaint = models.ForeignKey(
        to='Plaint',
        verbose_name=_('plaint'),
        on_delete=models.PROTECT
    )
 
    def get_poa1_from_plaint(self):
        if (self.plaint.power_of_attorney is not None
                and self.plaint.case.plaintiff_representative == self.plaint.power_of_attorney.relative_person):
            poa = self.plaint.power_of_attorney
        else:
            poa = None
        return poa
 
    def get_poa2_from_plaint(self):
        # The same as for the first power of attorney
        if (self.plaint.power_of_attorney_2 is not None
                and self.plaint.case.plaintiff_representative == self.plaint.power_of_attorney_2.relative_person):
            poa = self.plaint.power_of_attorney_2
        else:
            poa = None
        return poa
 
    power_of_attorney = models.ForeignKey(
        verbose_name=_('power of attorney'),
        to='ImportedDocument',
        on_delete=models.PROTECT,
        #null=True,
        #blank=True,
        related_name='+',
        default=get_poa1_from_plaint,
    )
 
    power_of_attorney_2 = models.ForeignKey(
        verbose_name=_('power of attorney') + ' 2',
        to='ImportedDocument',
        on_delete=models.PROTECT,
        null=True,
        blank=True,
        related_name='+',
        default=get_poa2_from_plaint
    )
и модели админки:
Python
1
2
3
4
5
6
7
8
class WritOfExecutionTemplateAdminInline(admin.TabularInline):
    model = WritOfExecutionTemplate
 
 
class PlaintAdmin(admin.ModelAdmin):
    inlines = (
        WritOfExecutionTemplateAdminInline,
    )
Добавлено через 4 минуты
Про сигналы сейчас почитаю, может и на создание есть.
0
 Аватар для Wi0M
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
04.06.2019, 02:09
post_save - вызывается после сохранения модели, а pre_save - до. я не понимаю зачем что то куда то писать при нажатии на кнопку "добавить шаблон", просто выведи форму и все. также как это реализовано в админке джанго.
0
 Аватар для artem78
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
04.06.2019, 13:57  [ТС]
Цитата Сообщение от Wi0M Посмотреть сообщение
я не понимаю зачем что то куда то писать при нажатии на кнопку "добавить шаблон", просто выведи форму и все
Ты про TabularInline вообще слышал? Я его использую. Зачем мне вручную форму создавать?
0
 Аватар для artem78
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
04.06.2019, 14:14  [ТС]
Для особо непонятливых покажу в картинках.
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
04.06.2019, 19:30
artem78, аякс запрос юзай (посмотри, что в джанге отвечает за появление этих полей по клику и переделай его под себя). по нажатию на кнопку создавай записи (для этого нужно придумать логику) и выводи созданные записи в селект

Добавлено через 17 минут
Но это будет нелегко
https://github.com/django/djan... bular.html
https://github.com/django/djan... inlines.js
0
Эксперт Pascal/Delphi
 Аватар для mmm_corp
103 / 91 / 32
Регистрация: 30.05.2015
Сообщений: 594
09.06.2019, 16:04
здесь либо кастомная форма, либо мучатся с ява-скриптом для нужного функцыонала
ява-скрипт мне кажется проще и правельней будет, но как тут писали нужно будет помучатся чуток с этим
0
 Аватар для artem78
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729
18.06.2019, 13:39  [ТС]
Нашёл такое решение:
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
class WritOfExecutionTemplateAdminInline(admin.TabularInline):
    model = WritOfExecutionTemplate
    extra = 0
 
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        try:
            parent_obj_id = request.resolver_match.kwargs['object_id']
            parent_plaint = Plaint.objects.get(pk=parent_obj_id)
            print(parent_plaint)
            default_poa1 = parent_plaint.power_of_attorney
            default_poa2 = parent_plaint.power_of_attorney_2
            print(default_poa1)
            print(default_poa2)
 
            if db_field.name == 'power_of_attorney':
                kwargs['initial'] = default_poa1
                return db_field.formfield(**kwargs)
            elif db_field.name == 'power_of_attorney_2':
                kwargs['initial'] = default_poa2
                return db_field.formfield(**kwargs)
        except KeyError:
            pass
 
        return super().formfield_for_foreignkey(
            db_field, request, **kwargs
        )
НО! Если сохранять с теми доверенностями, что подставились автоматом - шаблон не сохраняется, а если одну или обе поменять - сохраняется. Никак не пойму, почему так.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.06.2019, 13:39
Помогаю со студенческими работами здесь

Как вытащить значение поля модели внутри самой модели
Здравствуйте. При написании моего проекта возник следующий вопрос. Имеется модель: class Candidate(models.Model): ...

Заполнение тч поля из справочника(заполнение ссылочного поля)
Здравствуйте! Существует док с полем Справочник.Ссылка.Номенклатура и спрНоменклатура вопрос состоит вот в чем создал запрос на...

Установить начальное значение для поля с auto increment
как установить начальное значение для поля с AI, например если мне надо чтоб счёт поля ID начинался с 1157..... как это сделать? и возможно...

Как произвести выборку одного поля по условию другого поля в коллекции?
Всем привет! Как произвести выборку одного поля по условию другого поля в коллекции? Т.е. допустим есть класс MyClass: public class...

Как прописать обновление этого поля – т.е. “oninput” по условию, что меняется значение поля с датой?
Есть поле для выбора дат публикаций объявления в форме… <input type="text" name="dt" id="dt" oninput='init(this.value)' ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru