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

Автоматическое заполнение поля формы

20.03.2019, 19:19. Показов 12065. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
У меня есть несколько таблиц в базе данных, например:
Python
1
2
3
4
5
6
7
8
9
10
class c_nar(models.Model):
    dnar   = models.DateTimeField(auto_now=False, auto_now_add=False, verbose_name = "Дата и время нарушения")
    dotch  = models.DateField(auto_now=False, auto_now_add=False, verbose_name = "Дата отчета")
    nom    = models.CharField(max_length=100, verbose_name="Номер отчета")
    nazv   = models.CharField(max_length=1000, verbose_name="Название нарушения")
    sost   = RichTextField(verbose_name="Описание состояния до нарушения")
    posl   = RichTextField(verbose_name = "Последовательность событий")
class jn_posl(models.Model):
    opis = models.TextField(verbose_name="Описание последствия нарушения")
    nar = models.ForeignKey(c_nar, on_delete=models.CASCADE, verbose_name="Нарушение в работе установки")
Наполняю я их через веб интерфейс собственноручно (не через админ панель).
Вот файл forms.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
26
27
28
29
30
31
32
class c_narForm(forms.ModelForm):
    class Meta:
        model = c_nar
        fields = ('dnar', 'dotch', 'nom', 'nazv', 'sost', 'posl')
        widgets = {
            'dnar': forms.DateTimeInput(format="%d.%m.%Y %H:%M:%S",
                                    attrs={
                                        "class": "form-control",
                                        "value": datetime.datetime.strftime(datetime.datetime.now(), format="%d.%m.%Y %H:%M"),
                                        "type": "datetime",
                                    }),
            'dotch': forms.DateInput(format="%d.%m.%Y",
                                    attrs={
                                        "class": "form-control",
                                        "value": datetime.datetime.strftime(datetime.datetime.now(), format="%d.%m.%Y"),
                                        "type": "datetime",
                                    }
                                    ),
            'nom': forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите номер отчета",}),
            'nazv': forms.TextInput(attrs={"class": "form-control", "placeholder": "Введите название нарушения",}),
            'sost': forms.Textarea(attrs={"class": "form-control", "placeholder": "Опишите состояния ИЯУ до нарушения",}),
            'posl': forms.Textarea(attrs={"class": "form-control", "placeholder": "Опишите последовательность событий", }),
        }
 
class jn_poslForm(forms.ModelForm):
    class Meta:
        model = jn_posl
        fields = ('opis', 'nar')
        widgets = {
            'opis': forms.Textarea(attrs={"class": "form-control", "placeholder": "Опишите последствия нарушения в работе ИЯУ", }),
            'nar': forms.Select(attrs={"class": "selectpicker form-control", "data-live-search": "true", "data-size": "10", "title": "Выберите нарушение в работе ИЯУ",}),
        }
Вот файл views.py:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def nar_new(request):
    if request.method == "POST":
        form = c_narForm(request.POST)
        if form.is_valid():
            nar = form.save(commit=False)
            nar.save()
            return redirect('nar_detail', pk=nar.pk)
    else:
            form = c_narForm()
    return render(request, 'database\catalogs\_nar\_nar_edit.html', {'form': form})
def jn_posl_new(request):
    if request.method == "POST":
        form = jn_poslForm(request.POST)
        if form.is_valid():
            posl = form.save(commit=False)
            posl.save()
            return redirect('jn_posl_detail', pk=posl.pk)
    else:
            form = jn_poslForm()
    return render(request, 'database\journals\_posl\_posl_edit.html', {'form': form})
Вопрос в том, возможно ли при заполнении таблицы jn_posl в поле nar уже была выбрана последняя запись из таблицы c_nar?
Т.е. так что бы пользователю не надо было искать во всем раскрывающемся списке нужную запись, а уже была выбрана последняя. Это необходимо при последовательном наполнении таблиц, и мне было бы очень удобно, что бы это поле таблицы jn_posl, уже было зафиксировано за конкретной записью из таблицы c_nar.
Был бы очень благодарен за помощь!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2019, 19:19
Ответы с готовыми решениями:

Автоматическое заполнение шапки таблицы
Помогите начинающему. Долго рыл в интернете, но решения не нашел. Вывожу данные из модели в шаблон в виде таблицы. Шапку таблицы...

Автоматическое заполнение модели в Django
Здраствуйте, необходимо сделать так, чтобы в models.py отделялась часть модели, попадала в чекер(Который подключен по API), и информация из...

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

19
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
20.03.2019, 19:26
Попробуй в форме __init__ переопределить
Python
1
self.fields['nar'].default = c_nar.objects.last()
0
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
20.03.2019, 19:51  [ТС]
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
Попробуй в форме __init__ переопределить
Это в файле forms.py переопределить функцию __init__?
Тогда получиться, что у меня во всех случаях она будет брать последнюю запись из таблицы c_nar. Хотелось бы организовать так, что бы это было опционально. Т.е. базу данных я наполняю как в разнойбой - разные таблицы, разные данные и в этом случае у меня должна быть возможность выбора в поле nar таблицы jn_posl разных значений. А есть функционал, когда у меня последовательно вносятся данные в базу данных, т.е. сначала наполняется таблица c_nar, а потом (сразу следом) таблица jn_posl. И вот в этом случае, былобы очень удобно что бы пользователь уже не выбирал значения в поле nar таблицы jn_posl, а это поле было бы уже заполненным последним значением из таблицы c_nar.
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
20.03.2019, 20:05
Цитата Сообщение от BenWade Посмотреть сообщение
Хотелось бы организовать так, что бы это было опционально.
ну сделайте какой-то флаг в моделе c_nar, например
Python
1
show_default = models.BooleanField(default=False)
и с помощью проверки на значение флага определите, нужно ли там автозаполнение.
0
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
21.03.2019, 10:31  [ТС]
В файле forms.py класс jn_poslForm переписал следующим образом (добавил переопределение функции __init__):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
class jn_poslForm(forms.ModelForm):
 
    class Meta:
        model = jn_posl
        fields = ('opis', 'nar', 'posl')
        widgets = {
            'opis': forms.Textarea(attrs={"class": "form-control", "placeholder": "Опишите последствия нарушения в работе ИЯУ", }),
            'nar': forms.Select(attrs={"class": "selectpicker form-control", "data-live-search": "true", "data-size": "10", "title": "Выберите нарушение в работе ИЯУ",}),
            'posl': forms.Select(attrs={"class": "selectpicker form-control", "data-live-search": "true", "data-size": "10", "title": "Выберите последствия нарушений в работе ИЯУ", }),
        }
 
    def __init__(self, *args, **kwargs):
        self.fields['nar'].default = c_nar.objects.last()
Но браузер при загрузки страницы для наполнения этой таблицы выдает ошибку:
AttributeError at /jn_posl_new/
'jn_poslForm' object has no attribute 'fields'
В чем тут может быть проблема?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
21.03.2019, 10:57
BenWade, возможно, потому что в jn_posl нет атрибута posl?

и init как-то так переписать надо

Python
1
2
3
    def __init__(self, *args, **kwargs):
        super(jn_poslForm, self).__init__(*args, **kwargs)
        self.fields['nar'].default = c_nar.objects.last()
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.03.2019, 10:58
Лучший ответ Сообщение было отмечено BenWade как решение

Решение

Добавь initial:
Python
1
2
3
form = jn_poslForm(initial={
    'nar': /*тут нужный объект*/
})
Это во вьюшке. А сами формы трогать не надо.
1
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
21.03.2019, 11:14  [ТС]
m0nte-cr1st0, ошибку не выдает, но при заходе на страницу заполнения таблицы jn_posl, поле nar всравно остается пустым. Не прикрепляется к нему последняя запись из таблицы c_nar
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
21.03.2019, 11:21
Лучший ответ Сообщение было отмечено BenWade как решение

Решение

BenWade, кстати, да. замени default на initial. должно заработать, по идее.
Python
1
self.fields['nar'].initial = c_nar.objects.last()
1
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
21.03.2019, 11:25  [ТС]
Всем большое спасибо! Заработало!
0
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 22
03.10.2023, 18:21
Добрый день. Не уверен, что стоит создавать новую тему...
А как сделать автозаполнение поля при создании записи через админку DJango?
К примеру, я нажимаю добавить запись, переходит на страницу новой записи, в которой нужно заполнить несколько полей. Хотелось, чтобы в поле "имя файла" уже было что-то вписано (для примера, имя последней добавленной записи).

admin.py
Python
1
2
3
4
5
6
7
8
9
class PictAdmin(admin.ModelAdmin):
    list_per_page = 20
    list_display = ['name', 'color', 'get_html_photo', 'get_list_category']
    list_display_links = ['name']
    search_fields = ['name', 'tags__tag']
    list_filter = ['time_update']
    fields = ['name', 'alt', 'color', 'photo', 'get_html_photo_fields', 'time_update', 'cat', 'tags']
    readonly_fields = ['time_update', 'get_html_photo_fields']
    filter_horizontal = ['cat', 'tags']
Миниатюры
Автоматическое заполнение поля формы   Автоматическое заполнение поля формы  
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.10.2023, 18:13
Цитата Сообщение от hendeman Посмотреть сообщение
А как сделать автозаполнение поля при создании записи через админку DJango?
Имхо, стоило создать новую тему. Выше ответ прозвучал, админские формы почти ничем не отличаются от обычных форм.

Python
1
2
3
4
5
6
7
8
9
10
11
class PictAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['name'].initial = 'name222'
 
    class Meta:
        model = PictAdmin
 
class PictAdmin(admin.ModelAdmin):
    # …
    form = PictAdminForm
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
05.10.2023, 04:31
Можно еще в моделях сделать атрибут default и туда метод подсунуть, который что-то генерит рандомно ну или не рандомно
0
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 22
05.10.2023, 19:53
Спасибо, за ответ. У меня почему-то появляется ошибка:
from pict.admin import PictAdmin
ImportError: cannot import name 'PictAdmin' from partially initialized module 'pict.admin' (most likely due to a circular import)
Кликните здесь для просмотра всего текста

admin.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
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
from django.contrib import admin
from django.utils.safestring import mark_safe
 
from pict.forms import PictAdminForm
from pict.models import Pict, Category, Color, TagPict
 
 
class PictAdmin(admin.ModelAdmin):
    form = PictAdminForm
    list_per_page = 20
    list_display = ['name', 'color', 'get_html_photo', 'get_list_category']
    # list_editable = ['color']
    list_display_links = ['name']
    search_fields = ['name', 'tags__tag']
    list_filter = ['time_update']
    fields = ['name', 'alt', 'color', 'photo', 'get_html_photo_fields', 'time_update', 'cat', 'tags']
    readonly_fields = ['time_update', 'get_html_photo_fields']
    filter_horizontal = ['cat', 'tags']
 
 
    def get_html_photo(self, object):
        if object.photo:
            return mark_safe(
                f"<a href = '{object.photo.url}' target=_blank><img src='{object.photo.url}' width=150></a>")
 
    def get_html_photo_fields(self, object):
        if object.photo:
            return mark_safe(
                f"<a href = '{object.photo.url}' target=_blank><img src='{object.photo.url}' width=400></a>")
 
    def get_list_category(self, object):
        a = Pict.objects.get(name=object.name)
        return ", ".join([x.cat for x in a.cat.all()])
 
    get_html_photo.short_description = 'Миниатюра'
    get_html_photo_fields.short_description = 'Миниатюра'
    get_list_category.short_description = 'Категории'
 
 
class CategoryAdmin(admin.ModelAdmin):
    list_display = ['cat', 'slug']
    list_display_links = ['cat']
    search_fields = ['cat']
    prepopulated_fields = {"slug": ("cat",)}
 
 
class TagPictAdmin(admin.ModelAdmin):
    list_display = ['tag', 'slug']
    list_display_links = ['tag']
    search_fields = ['tag']
    prepopulated_fields = {"slug": ("tag",)}
 
 
class ColorAdmin(admin.ModelAdmin):
    list_display = ['color', 'slug_color']
    list_display_links = ['color']
    ordering = ['color']
    # prepopulated_fields = {"slug_color": ("color",)}
 
 
admin.site.register(Pict, PictAdmin)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Color, ColorAdmin)
admin.site.register(TagPict, TagPictAdmin)

Кликните здесь для просмотра всего текста

forms.py
Python
1
2
3
4
5
6
7
8
9
10
11
from django import forms
from pict.admin import PictAdmin
 
 
class PictAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['name'].initial = 'name222'
 
    class Meta:
        model = PictAdmin
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
06.10.2023, 02:47
В файле формс, вторая строка тебе модель PictAdmin надо не из админ а из моделс наследовать
1
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 22
06.10.2023, 17:35
Не совсем понял. Тут даже PyCharm автоматически сделал импорт из admin.py, потому что модель PictAdmin находится в admin.py
В models.py PictAdmin отсутствует.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
06.10.2023, 18:00
Цитата Сообщение от hendeman Посмотреть сообщение
В models.py PictAdmin отсутствует.
Так нужно брать вашу модель.
0
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 22
06.10.2023, 23:27
А теперь вообще ничего не понял(((
Прикреплю сюда 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
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
from django.db import models
from django.urls import reverse
 
 
class Color(models.Model):
    color = models.CharField(max_length=100, verbose_name='Цвет')
    slug_color = models.SlugField(max_length=100, unique=True, db_index=True, verbose_name='SlugURL')
 
    def __str__(self):
        return self.color
 
    class Meta:
        verbose_name = 'Цвет'
        verbose_name_plural = 'Цвета'
 
 
class TagPict(models.Model):
    tag = models.CharField(max_length=100, db_index=True, verbose_name='Ключевое слово')
    slug = models.SlugField(max_length=100, db_index=True, unique=True)
 
    def __str__(self):
        return self.tag
 
    def get_absolute_url(self):
        return reverse('tag', kwargs={'tag_slug': self.slug})
 
    class Meta:
        verbose_name = 'Ключевое слово'
        verbose_name_plural = 'Ключевые слова'
 
 
class Category(models.Model):
    cat = models.CharField(max_length=100, verbose_name='Категория')
    slug = models.SlugField(max_length=100, unique=True, db_index=True, verbose_name='SlugURL')
 
    def __str__(self):
        return self.cat
 
    def get_absolute_url(self):
        return reverse('skinali', kwargs={'slug_cat': self.slug})
 
    class Meta:
        verbose_name = 'Категории'
        verbose_name_plural = 'Категории'
 
 
class Pict(models.Model):
    name = models.CharField(max_length=10, unique=True, db_index=True, verbose_name='Имя файла')
    alt = models.CharField(max_length=250, blank=True, verbose_name='Описание')
    photo = models.ImageField(upload_to="photos/", verbose_name='Изображение')
    time_update = models.DateTimeField(auto_now_add=True, verbose_name='Время добавления')
    cat = models.ManyToManyField(Category)
    tags = models.ManyToManyField(TagPict, blank=True, related_name="tags")
    color = models.ForeignKey(Color, on_delete=models.SET_NULL, null=True, verbose_name="Цвет")
 
    def __str__(self):
        return self.name
 
    class Meta:
        verbose_name = 'Изображения'
        verbose_name_plural = 'Изображения'
        ordering = ['-id']
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
07.10.2023, 04:47
Python
1
2
3
4
5
6
7
class PictAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['name'].initial = 'name222'
 
    class Meta:
        model = Pict
0
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 22
09.10.2023, 10:20
Спасибо за поправку. Теперь появляется другая ошибка:
django.core.exceptions.ImproperlyConfigu red: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form PictAdminForm needs updating.
Все заработало, когда в класс Meta добавил атрибут fields
Python
1
2
3
4
5
6
7
8
9
10
11
12
from django import forms
from pict.models import Pict
 
 
class PictAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['name'].initial = 'name222'
 
    class Meta:
        model = Pict
        fields = ['name', ]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2023, 10:20
Помогаю со студенческими работами здесь

Автоматическое заполнение поля формы
Здравствуйте уважаемые форумчане. :help: Ищу наиболее оптимальное решение своего скромного задания. 1. Две таблицы...

Автоматическое заполнение в поля таблицы (формы)
Здравствуйте! Уже нет сил, ничего не получается, что описано в подобных темах на форуме (по видимому руки не из того места растут...) у...

Автоматическое заполнение поля формы из таблицы
Добрый день господа. Такая вот проблема,с которой бьюсь длительной время.На форуме вроде как есть подсказки по моей теме,но все равно...

Автоматическое заполнение поля формы рассчитанным значением
у таблицы есть поля: -остаток перед выездом -заправка -остаток при въезде -фактический расход -показания при выезде (км) ...

Автоматическое заполнение поля формы при вводе значения в другое поле
Добрый день. Прошу помощи в решении одного вопроса: Есть база данных и две таблицы - БУКВЫ - Ученики В форме, созданной на...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru