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

Заполнение формы по моделям

22.04.2019, 17:59. Показов 2679. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Помогите пожалуйста с решением такой проблемы. Есть три модели:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class c_nar(models.Model):
    dnar   = models.DateTimeField(auto_now=False, auto_now_add=False, verbose_name = "Дата и время нарушения")
    nazv   = models.CharField(max_length=1000, verbose_name="Название нарушения")
    ust    = models.ForeignKey(c_ust, on_delete=models.CASCADE, verbose_name="Установка")
 
class jn_posl(models.Model):
    opis = models.TextField(verbose_name="Описание последствия")
    nar = models.ForeignKey(c_nar, on_delete=models.CASCADE, verbose_name="Нарушение в работе установки")
    posl = models.ForeignKey(djn_posl, on_delete=models.CASCADE, verbose_name="Последствие нарушения")
 
class jn_ned(models.Model):
    opis = RichTextField(verbose_name="Описание недостатка")
    nar = models.ForeignKey(c_nar, on_delete=models.CASCADE, verbose_name="Нарушение в работе установки")
    ned = models.ForeignKey(djn_ned, on_delete=models.CASCADE, verbose_name="Недостаток")
Есть соответствующие формы:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class c_narForm(forms.ModelForm):
    class Meta:
        model = c_nar
        fields = ('dnar', 'nazv', 'ust')
 
class jn_poslForm(forms.ModelForm):
    class Meta:
        model = jn_posl
        fields = ('opis', 'nar', 'posl')
class jn_nedForm(forms.ModelForm):
 
    class Meta:
        model = jn_ned
        fields = ('opis', 'nar', 'ned')
Соответственно у меня на сайте реализуется следующая логика: открывается карточка по внесению информации о нарушении на установке - при этом должны быть внесены записи во все три таблицы.
В настоящее время я реализую это так: отображаю первую форму: 'form': c_narForm() с соответствующим шаблоном:
HTML5
1
2
3
4
5
    <form method="POST" class="post-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="button" onclick="location.href='{% url 'add_nar' %}';" class="btn btn-primary">Назад</button>
        <button type="submit" class="btn btn-primary">Далее</button>
    </form>
И так для остальных двух форм, только с небольшой припиской - 'form': jn_poslForm(initial={'nar': nar}). Т.е. при загрузке второй и третей формы передаю, что поле nar уже заполнено последней записью из таблицы c_nar.
Впринципе все нормально работает, но приходится несколько раз перезагружать страницу по внесению данных о конкретном нарушении на установке, что отображать все три формы. Хочу задать вопрос - возможно ли как то сделать одну единую форму по наполнению сразу всей информацией о нарушении на установке? Как это реализовать с учетом того, что есть связанное через ForeignKey поле?
Буду очень благодарен за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2019, 17:59
Ответы с готовыми решениями:

Как сделать чтобы Заполнение одного значения формы вызывало заполнение множества других
Народ помогите чтобы при выставлении значения в ячейке формы КПКНазв (основана на табл.Договора) в форму проставлялись значения из таблицы...

Заполнение данных формы на офф сайте данными из моей формы регистрации
У меня нестандартный вопрос.Вот на сайте Assassin's Creed форма регистрации ,я делаю свой веб сайт-что-то типа фан сайта к этой игре,но это...

Заполнение подчиненной формы на основе данных другой формы
Добрый день! Возникла следующая задача: заполнять данные в подчиненной форме из данных в другой форме. Есть форма создания заказа, в...

6
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
22.04.2019, 19:28
Если три разных формы на одной странице - то формсет, например.
0
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
22.04.2019, 20:13  [ТС]
m0nte-cr1st0, смотреть в сторону inlineformset_factory? Т.е. проблемы со связанным через ForeignKey полем не будет?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
22.04.2019, 22:32
BenWade, не должно. Если всё по уму делать.
0
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
23.04.2019, 13:08  [ТС]
Я может быть не совсем верно сформулировал изначально вопрос. Почитал про форм сеты, как я понимаю, обязательно необходимо иметь записи в основной модели - в моем случае в таблице c_nar.
У меня же вопрос в том, что есть поля таблицы c_nar и есть поля таблиц jn_posl и jn_ned. Я бы хотел попытаться реализовать такую форму на которой одновременно все поля всех трех таблиц были доступны для заполнения (например я вношу вообще первую запись в базу данных). Т.е. заполнять всю информацию о конкретном нарушении на установке и не перещелкивать между разными формами заполнения всех трех таблиц. Но при этом не понимаю как будет выглядеть поле nar таблиц jn_posl и jn_ned, которое через ForeignKey связано с таблицей c_nar. Или реализовать мои хотелки в этом плане не возможно? необходимо будет для внесения записей во все три таблицы писать три формы и их по очереди заполнять (как в первом посте написал)?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
23.04.2019, 13:17
BenWade, по-моему, формсеты для этого и предназначены - объединять на одной страницы несколько разных форм.
https://docs.djangoproject.com... /formsets/
0
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
24.04.2019, 13:55  [ТС]
До конца так и не разобрался с формсетами. Поэтому решил достаточно просто. Все три формы по трем моделям лежат в одной форме:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    <form id="id_form_nar" method="POST" class="post-form" action="">{% csrf_token %}
            <div>
                <div id="menu_c_nar" class="tab-pane fade in active" style="margin-top: 10px;">{{ form_c_nar.media }}
                    {{ form_c_nar.as_p }}
                </div>
                <div id="menu_jn_posl" class="tab-pane fade">{{ form_jn_posl.media }}
                    {{ form_jn_posl.as_p }}
                </div>
                <div id="menu_jn_ned" class="tab-pane fade">{{ form_jn_ned.media }}
                    {{ form_jn_ned.as_p }}
                </div>
            </div>
        </div>
        <div>
            <button id="id_button_return" type="button" class="btn btn-default">Назад</button>
            <button id="id_button_close_modal" type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
            <button id="id_button_save" type="submit" class="btn btn-primary">Сохранить</button>
        </div>
    </form>
Вьюшка:
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
def nar_add(request):
    if request.method == "POST":
        form_c_nar = c_narForm(request.POST, prefix="form_c_nar")
        form_jn_posl = jn_poslForm(request.POST, prefix="form_jn_posl")
        form_jn_ned = jn_nedForm(request.POST, prefix="form_jn_ned")
        if form_c_nar.is_valid() and form_jn_posl.is_valid() and  form_jn_ned.is_valid():
            nar_c_nar = form_c_nar.save()
            nar_jn_posl = form_jn_posl.save(commit=False)
            nar_jn_ned = form_jn_ned.save(commit=False)
            nar_jn_posl.nar = nar_c_nar
            nar_jn_posl.save()
            nar_jn_ned.nar = nar_c_nar
            nar_jn_ned.save()
    else:
        form_c_nar = c_narForm(prefix="form_c_nar")
        form_jn_posl = jn_poslForm(prefix="form_jn_posl")
        form_jn_ned = jn_nedForm(prefix="form_jn_ned")
 
    context = {
        'form_c_nar': form_c_nar,
        'form_jn_posl': form_jn_posl,
        'form_jn_ned': form_jn_ned,
    }
    return render(request, 'add_nar\_nar_add.html', context)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2019, 13:55
Помогаю со студенческими работами здесь

Заполнение dataGridView одной формы данными из другой формы
Добрый день! Оооочень прошу помочь. Что то никак не могу разобраться. Есть основная форма Form1, в которой у меня идут все...

При загрузке формы происходит заполнение DataSet, но заполнение происходит не вполне корректно
Есть строго типизированные DataSet и TableAdapter. При загрузке формы происходит заполнение DataSet, но заполнение происходит не вполне...

Подскажите по моделям
У меня задача соединить 2 офиса между собой, возможно еще третий потребуется. Нужна не дорогая железка семейства циско, есть такие в...

Вопрос по мат. моделям
помогите построить математическую модель. Задана матрица производительности автоматических модулей по выпуску деталей А и В в смену....

Вопрос по моделям в Django
Есть такая задача, создать django проект который управляет базой студентов. Сущности: Студент - ФИО, дата-рождения, No.студ-билета,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
моя боль
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 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами 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 из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru