Получение идентификатора автополя вновь созданной записи в модели, при условии описания полей в forms.py [закрыто]

Я только начинаю изучать django, подскажите пожалуйста: Мне нужно получить id вновь созданной записи в модели, проблема в том, что я не знаю как его объявить. Так как id записи является автополем, то id не передается в forms.py, а создается/остается в базе данных после создания записи. Если бы я не использовал функциональность forms.py, я бы смог получить этот id, подобно примеру из документации (https://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs#auto-incrementing-primary-keys):

Автоинкрементные первичные ключи Если в модели есть AutoField - автоинкрементный первичный ключ - то это автоинкрементное значение будет вычислено и сохранено в качестве атрибута вашего объекта при первом вызове функции save():

b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
b2.id     # Returns None, because b2 doesn't have an ID yet.
b2.save()
b2.id     # Returns the ID of your new object.

Невозможно определить значение ID до вызова save(), потому что это значение вычисляется вашей базой данных, а не Django. Для удобства, каждая модель по умолчанию имеет AutoField с именем id, если вы явно не указали primary_key=True для поля в вашей модели. Смотрите документацию по AutoField для более подробной информации.

Я запутался в своем коде. Я не знаю, как ссылаться на id. (forms.Id_Incidents - impossible).

views.py

def incident(request):
    error = ''
    if request.method == 'POST' and 'next' in request.POST:
        form = AkpIncidentsForm(request.POST)
        if form.is_valid():
            form.save()

            # Unknown Id_Incidents:
            request.session['Id_Incidents'] = Id_Incidents
            return redirect('main:victim')
        else:
            error = 'The form is filled out incorrectly'
    form = AkpIncidentsForm()

    data = {
        'form': form,
        'error': error,

    }

models.py

class AkpIncidents(models.Model):
    Id_Incidents = models.AutoField(primary_key=True, verbose_name='Идентификатор инцидента')

    Date_Time = models.DateTimeField(auto_now=False, blank=True, null=True, verbose_name='Дата/время происшествия')
    # stage 1 fields
    Date = models.DateField(auto_now=False, blank=True, null=True, verbose_name='Дата происшествия')
    Time = models.TimeField(auto_now=False, blank=True, null=True, verbose_name='Время происшествия')
    Id_Filial = models.ForeignKey('AkpFilial', models.DO_NOTHING, verbose_name='Филиал')
    Id_Department = models.ForeignKey('AkpDepartment', models.DO_NOTHING, verbose_name='Подразделение')
    Location = models.CharField(max_length=256, verbose_name='Место происшествия')
    Id_Category = models.ForeignKey('AkpCategory', models.DO_NOTHING, verbose_name='Категория происшествия')
    Execution_Works = models.TextField(verbose_name='Выполнение работ по')
    Short_Description = models.TextField(verbose_name='Краткое описание происшествия:')
    Full_Description = models.TextField(verbose_name='Полное описание происшествия:')

    # Вспомогательные
    Change_Time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name='Время изменения')
    Change_User = models.CharField(max_length=256, blank=True, null=True, verbose_name='Пользователь, внесший изменения')
    Del_Date = models.DateTimeField(auto_now=False, blank=True, null=True, verbose_name='Дата удаления')
    Del_User = models.CharField(max_length=256, blank=True, null=True, verbose_name='Пользователь, удаливший данные')
    Is_Delete = models.BooleanField(default=False, blank=True, null=True, verbose_name='Удален')

    Is_Posted = models.BooleanField(default=False, verbose_name='Опублековано')

    objects = models.Manager()

    def get_absolute_url(self):
        """
        Возвращает URL-адрес для доступа к определенному экземпляру инцидентов.
        """
        return reverse('Incident-detail', args=[str(self.Id_Incidents)])

    def __str__(self):
        return self.Short_Description

    class Meta:
        db_table = 'AkpIncidents'
        verbose_name = 'Инцидент'
        verbose_name_plural = 'Инциденты'
    return render(request, 'main/incident.html', data)

forms.py

class AkpIncidentsForm(ModelForm):
    required_css_class = 'required'

    class Meta:
        model = AkpIncidents
        fields = ['Id_Incidents', 'Date', 'Time', 'Id_Filial', 'Id_Department', 'Location', 'Id_Category',
                  'Execution_Works', 'Short_Description', 'Full_Description']

        widgets = {
            # "Id_Incidents": Textarea(attrs={
            #     'class': 'form-control',
            #     'placeholder': 'Id_Incidents',
            # }),

            "Date": DateInput(attrs={
                'class': 'form-control',
                'type': 'Date'
            }),

            "Time": TimeInput(attrs={
                'class': 'form-control',
                'type': 'Time'
            }),

            "Id_Filial": Select(attrs={
                'class': 'form-select'
            }),

            "Id_Department": Select(attrs={
                'class': 'form-select'
            }),

            "Location": Textarea(attrs={
                'class': 'form-control',
                'placeholder': 'Укажите место происшествия',
                'style': 'height: 100px'
            }),
< <
{% for field in form.visible_fields %}
                        <table class='table align-middle table-borderless event-tab' width="100%">
                          <tbody>
                            <tr>
                              <td class="first">{{ field.label }}</td>
                              <td class="second">{{ field }}</td>
                            </tr>
                          </tbody>
                        </table>
                    {% endfor %}
< <
from django.urls import path
# from .views import GroupListView
from .import views
from .views import AkpVictimView, events
from django.views.generic import RedirectView
from django.urls import path, include, reverse_lazy

app_name = "main"

urlpatterns = [
    path('', views.start, name="start"),
    path('incident', views.incident, name="incident"),
    path('victim', views.victim, name="victim"),
urls.py

....

Вернуться на верх