Django:如何通过表单提交当前用户的用户名,而不需要用户输入i

2024-04-25 08:05:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种简单的方法,让django表单在用户提交表单时在后台提交当前登录用户的用户名。我希望这是自动发生的。你知道吗

我在其他stackoverflow条目中看到过调用init函数的例子。然而,我发现这种方式非常混乱和冗长。你知道吗

我用的是Django 2.2。你知道吗


Tags: django方法函数用户表单init方式条目
1条回答
网友
1楼 · 发布于 2024-04-25 08:05:13

我找到了一个很好的标准方法。你知道吗

最好的方法是使用名为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中提供的通过用户表单传递用户用户名的基本示例。这对我很有效。你知道吗

相关问题 更多 >