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

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

01.06.2019, 00:32. Показов 3882. Ответов 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
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 748
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
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 748
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
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 748
04.06.2019, 13:57  [ТС]
Цитата Сообщение от Wi0M Посмотреть сообщение
я не понимаю зачем что то куда то писать при нажатии на кнопку "добавить шаблон", просто выведи форму и все
Ты про TabularInline вообще слышал? Я его использую. Зачем мне вручную форму создавать?
0
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 748
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
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 748
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
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru