django - 纯 Django 表单将用户绑定到提交的表单和视图
问题描述
我不确定如何使用常规 Django 表单将登录用户绑定到提交的表单。我看到了很多使用 ModelForms 的示例,但没有使用 ModelForms(我可以说)。在我的 forms.py 中,我很难弄清楚如何添加作者字段。我不能只添加 author = forms.ForeignKey 或类似的东西。然后以某种方式在我看来我需要调用要保存到数据库中的作者字段(我下面的示例是我最好的猜测,并且可能与“tenant_form.author = request.user”不正确)。
我有一个看起来像这样的模型,并且有一个用户外键设置:
class AppyModel(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
date_time_form_filled = models.DateTimeField(auto_now_add=True)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
我有一个forms.py:
class TenantForm(forms.Form):
first_name = forms.CharField(required=False, label='First Name')
last_name = forms.CharField(required=False, label='Last Name')
我有一个views.py
@login_required
def tenant_create_form_view(request):
tenant_form = TenantForm()
if request.method == 'POST':
tenant_form.author = request.user
tenant_form = TenantForm(request.POST)
if tenant_form.is_valid():
print(tenant_form.cleaned_data)
AppyModel.objects.create(**tenant_form.cleaned_data)
else:
print(tenant_form.errors)
context = {
'form': tenant_form
}
return render(request, 'fill_appy.html', context)
解决方案
您应该在表格有效时添加作者,
tenant_form = TenantForm()
if request.method == 'POST':
tenant_form = TenantForm(request.POST)
if tenant_form.is_valid():
obj = tenant_form.save(commit=False)
obj.author = request.user #add author here
obj.save()
# .. rest of code
推荐阅读
- firebase - 在 FirebaseFirestore 上为许多用户获取 postId
- php - 在php中显示数组中的第一张图片
- terraform - 使用模块时无法创建 Terraform 资源组
- reactjs - Electron - Webview 必须附加到 DOM 错误
- javascript - 如何在openpgp JS中将参数消息作为文本传递
- settings - 本地管理员行为/权限 windows server 2019 os
- javascript - Discord.js 更改频道权限无济于事
- python - Python Aiohttp Asyncio:如何在每个任务之间创建延迟
- c# - 导致 Outlook 365 永久禁用自定义 VSTO COM 加载项的常见代码异味是什么?
- c# - IdentityServer 4 - 多选项卡登录 400 错误