Django - Inline formset - Как установить текущего пользователя

-Объектив- Мне нужно установить в Inline Formset текущего пользователя в качестве автоматического содержимого поля формы. (В настоящее время не работает)


Version Python 3.9.2 - Django 3.2

Контекст: Я создал список, в котором у меня есть несколько объектов(Headers). Из списка я могу создавать новые заголовки и получать доступ к детальной странице (Detailview) для каждого из них, используя внешний ключ (вызываемый PK-primarykey).

На этой странице я могу увидеть больше информации об одном конкретном заголовке. Каждый заголовок может иметь несколько строк информации, которые должны быть связаны с ним. Строки создаются или обновляются с помощью (максимум 4 различных) определенных наборов инлайн-форм.

- Проблема и ошибка-. Я создал формы, которые корректно отображаются, но мне нужно установить для каждой строки поле, которое автоматически получает "current user" в качестве своего содержимого. Я не могу сохранить и получаю вместо "User cannot be null".

Я не могу найти решение и пробовал много вещей, но застрял с этой ошибкой.

Буду признателен за любую помощь в решении этой проблемы. Заранее спасибо,


Ниже представлен некоторый код:

URLS.PY

from django.urls import path, re_path
from fttlapp import views

app_name= 'fttlapps'

urlpatterns = [
path('fttlapphome2/', views.Fttlapphome2View.as_view(), name='fttlapphome2'),
path('fttlogheader/', views.HeadfttlogListView.as_view(), name='headfttlogs'),
path('fttlogheader/add/', views.HeadfttlogCreateView.as_view(), name='headfttlogcreate'),
path('fttlogheader/<int:pk>/', views.HeadfttlogDetailView.as_view(), name='headfttlogdetail'),
path('fttlogheader/<int:pk>/flights/edit/', views.HeadfttlogDeafttlogEditView.as_view(), name='head_flight_edit'),
]

FORMS.PY

VIEWS.PY

HTML


{% extends 'base/dibase3.html' %}
{% load static %}

{% load crispy_forms_tags %}
{% crispy formset %}

{% block title %}Editing Flights and Instructions for {{ headfttlog.fttlcode }}{% endblock %}

{% block content %}


<style>

    .box{
        max-width: fit-content;
        margin: auto;

    }
</style>
 
</div>

<nav class="navbar navbar-expand-lg navbar-light bg-light">
    <div class="container-fluid">
      
        <div class="text-start">
          <a class="btn btn-outline-info " href="{% url 'fttlapps:headfttlogdetail' pk=headfttlog.pk %}">Back to Detail</a>
          
        </div>

     </div>
    </nav>
<hr>

<div class="container"> 

  <form action="" method="post" enctype="multipart/form-data">

    {% for hidden_field in form.hidden_fields %}
      {{ hidden_field.errors }}
      {{ hidden_field }}
    {% endfor %}

    {% csrf_token %}

    {{ form.management_form }}
    {{ form.non_form_errors }}

    <h3>Update Collection</h3>
    {% for deafttlog_form in form.forms %}
      <hr>
      <h5>
        {% if deafttlog_form.instance.id %}
          Deafttlog: {{ deafttlog_form.instance.dea_linetype }}
        {% else %}
          {% if form.forms|length > 1 %}
            Add another deafttlog
          {% else %}
            Add a deafttlog
          {% endif %}
        {% endif %}
      </h5>
      {% for hidden_field in deafttlog_form.hidden_fields %}
        {{ hidden_field.errors }}
      {% endfor %}
      <table>
        {{ deafttlog_form }}
      </table>
    {% endfor %}
    <hr>
    <p>
      <button type="submit" value="Update Flight" class="btn btn-primary w-100 mb-3">Update Flight</button>
      <a href="{{ author.get_absolute_url  }}" role="button" class="btn btn-secondary w-100">Return</a>
    </p>
  </form>

{% endblock content %}

Для полей аудита, таких как creator и modifier поля модели, я обычно устанавливаю blank=True, null=True в определении поля модели. Просто сделав это, ваш код будет работать, потому что вы уже обрабатываете установку dea_creator и dea_modifier в ваших представлениях.

Если вы хотите внедрить это в базу данных, как вы делаете сейчас, вам придется передать request.user в ваш набор форм и установить его в качестве начального значения для поля dea_creator при инициализации форм.

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