簡體   English   中英

保存提交表單的用戶(django)

[英]Save user who submitted form(django)

所以我正在為我的組織創建一個報告應用程序,我希望能夠保存提交報告的用戶。 問題是如果我在我的 model 上使用models.ForeignKey(User,on_delete=models.PROTECT)方法,我會得到所有用戶的下拉列表,這不是我想要的。

模型.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})

表格.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")

視圖.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")

編輯:模板/report_form.html

    {% extends "base_generic.html" %}
    <head>
    </head>
    <body>
    {% block content %}
      <form action="" method="post" onsubmit="return True">
        {% csrf_token %}
        <table>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<input type="hidden" name="user" value= "{{ request.user }}">
        {{ form.as_table }}
        {{ form.media }}
        </table>
        <input type="submit" value="Submit">
      </form>
    {% endblock %}
    </body>

go 關於這個有幾種方法。

您可以將blank=True添加到用戶 model 字段並在覆蓋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 }} 

嘗試使用model.CASCADE而不是model.PROTECT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM