Сохранить пользователя, отправившего форму(django)

Итак, я создаю приложение для создания отчетов для своей организации и хочу иметь возможность сохранять пользователя, который отправляет отчет. Проблема в том, что если я использую метод models.ForeignKey(User,on_delete=models.PROTECT) в моей модели, я получаю выпадающий список для всех пользователей, что не то, что я хочу.

models.py

class Report(models.Model):
    id = models.UUIDField(primary_key=True,default=uuid.uuid1,editable=False)
    department = models.ForeignKey(Company,null=True,on_delete=models.SET_NULL)
    user= models.ForeignKey(User,on_delete=models.PROTECT)
    submission_date= models.DateField(auto_now=True) #invisible to user
    submission_time = models.TimeField(auto_now=True) #invisible to ,user
    date = models.DateField(default=now,blank=False)
    time = models.TimeField(default=now,blank=False,help_text="hh:mm:ss")
    location = PlainLocationField()
    building = models.ForeignKey(bld,null=True,on_delete=models.SET_NULL)
    size = models.PositiveIntegerField()
    notes = models.TextField(blank=True)
    def __str__(self):
        return f'{self.date} {self.time} ({self.company})

form.py

from django.forms import ModelForm, fields
from django.shortcuts import redirect
from django.urls.conf import include
from .models import Report
from django import forms
from location_field.forms.plain import PlainLocationField

class ReportForm(forms.ModelForm):
    class Meta:
        model = Report
        fields = '__all__'
        location = PlainLocationField()
    def redirect():
        return redirect("Report")

views.py

from django.forms import fields
from django.forms.forms import Form
from django.http import request
from django.http.request import HttpRequest, validate_host
from django.http.response import HttpResponse, HttpResponseRedirect
from django.shortcuts import render,redirect
from django.urls.base import reverse
from django.views.generic.base import TemplateView
from django.contrib.auth import authenticate, login
from django.contrib.auth.mixins import LoginRequiredMixin
# Create your views here.
from .forms import ReportForm
from .models import Report
from django.views.generic.edit import CreateView, UpdateView, DeleteView

class ReportCreate(LoginRequiredMixin,CreateView):
    Template = "templates\reports\report.html"
    model = Report
    fields = '__all__'
    def form_valid(self, form):
        return super().form_valid(form)
    def get_success_url(self):
        return reverse('Report')
def home(request):
    return render(request,"users/home.html")

попробуйте использовать model.CASCADE вместо model.PROTECT.

Есть несколько способов сделать это.

Вы можете добавить blank=True к полю модели пользователя и назначить пользователя при переопределении метода form_valid:

def form_valid(self, form):
        form.instance.user = self.request.user
        form.instance.save()
        return super(ReportCreate, self).form_valid(form)

Или отобразите поле пользовательской формы как скрытое поле и предварительно заполните его:

<input type="hidden" name="user" value="{{ request.user }} 
Вернуться на верх