2024-04-25 08:05:13 发布
网友
我正在寻找一种简单的方法,让django表单在用户提交表单时在后台提交当前登录用户的用户名。我希望这是自动发生的。你知道吗
我在其他stackoverflow条目中看到过调用init函数的例子。然而,我发现这种方式非常混乱和冗长。你知道吗
我用的是Django 2.2。你知道吗
我找到了一个很好的标准方法。你知道吗
最好的方法是使用名为CreateView的基于类的通用视图。Django文件中有一个明确的解释:
https://docs.djangoproject.com/en/2.2/topics/class-based-views/generic-editing/#models-and-request-user
在这个解释中,我将使用文档中的示例。你知道吗
首先:使用窗体的基本模型。这里没什么特别的。(型号.py)你知道吗
from django.contrib.auth.models import User from django.db import models class Author(models.Model): name = models.CharField(max_length=200) created_by = models.ForeignKey(User, on_delete=models.CASCADE) # ...
第二步:创建基于类的视图。在基于类的视图中,修改“def form\u valid(self,form)”,如下面的docs示例所示。(视图.py)你知道吗
from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic.edit import CreateView from myapp.models import Author class AuthorCreate(LoginRequiredMixin, CreateView): model = Author fields = ['name'] def form_valid(self, form): form.instance.created_by = self.request.user return super().form_valid(form)
第三个:定义URL。根据所有基于类的视图添加常规的“as\u view()”。(网址.py)你知道吗
app_name = 'logs' urlpatterns = [ path('', views.AuthorCreate.as_view(), name = "author_create"), ]
第四:CreateView基于类的通用视图有一个链接到它的默认模板名称(请参见“template\u name”属性下的django docs for CreateView)。默认模板名称遵循“authorcreate”的约定_表单.html". 因此,在应用程序的templates文件夹中创建一个html模板,其文件名遵循该约定。以下模板适用于我。(.html)
<form method="POST" action=""> {% csrf_token %} {{ form.as_p }} <input type="submit"> </form>
同样,这是Django docs中提供的通过用户表单传递用户用户名的基本示例。这对我很有效。你知道吗
我找到了一个很好的标准方法。你知道吗
最好的方法是使用名为CreateView的基于类的通用视图。Django文件中有一个明确的解释:
https://docs.djangoproject.com/en/2.2/topics/class-based-views/generic-editing/#models-and-request-user
在这个解释中,我将使用文档中的示例。你知道吗
首先:使用窗体的基本模型。这里没什么特别的。(型号.py)你知道吗
第二步:创建基于类的视图。在基于类的视图中,修改“def form\u valid(self,form)”,如下面的docs示例所示。(视图.py)你知道吗
第三个:定义URL。根据所有基于类的视图添加常规的“as\u view()”。(网址.py)你知道吗
第四:CreateView基于类的通用视图有一个链接到它的默认模板名称(请参见“template\u name”属性下的django docs for CreateView)。默认模板名称遵循“authorcreate”的约定_表单.html". 因此,在应用程序的templates文件夹中创建一个html模板,其文件名遵循该约定。以下模板适用于我。(.html)
同样,这是Django docs中提供的通过用户表单传递用户用户名的基本示例。这对我很有效。你知道吗
相关问题 更多 >
编程相关推荐