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
при инициализации форм.