python - 如何在 Django 中保存 ModelForm 时将用户模型作为 ForeignKey 值传递?
问题描述
模型文件:
from django.db import models
from django.conf import settings
class Book(models.Model):
rel_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Posted By")
title = models.CharField(max_length=256, verbose_name="Title")
description = models.TextField(verbose_name="Description")
price = models.IntegerField(verbose_name="Price")
state = models.CharField(max_length=256, verbose_name="State")
city = models.CharField(max_length=256, verbose_name="City")
neighbourhood = models.CharField(max_length=256, verbose_name="Neighbourhood")
phone = models.IntegerField(verbose_name="Phone Number")
def __str__(self):
return self.title + f" ({self.rel_user.username})"
表格文件:
from django.forms import ModelForm
from Books.models import Book
class BookForm(ModelForm):
class Meta:
model = Book
fields = ['title', 'description', 'price', 'state', 'city', 'neighbourhood', 'phone']
视图文件:
from django.shortcuts import render, redirect
from Books.forms import BookForm
from django.contrib import messages
def sell(request):
if request.method == "GET":
form = BookForm()
else:
form = BookForm(request.POST, )
if form.is_valid():
form.save()
messages.success("Successfully added!")
return redirect('sell')
else:
messages.error("Please fill in all the fields.")
return render(request, 'Books/sell.html', {"form": form})
每次用户提交表单时,我都希望用该用户模型填充 ForeignKey 的值。我该怎么做呢?所以假设用户“John”已经填写了表格。当他单击提交时,他输入的详细信息 + 他的用户模型应该进入该条目的数据库。
解决方案
def sell(request):
if request.method == "POST":
form = BookForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.rel_user = request.user
instance.save()
messages.success("Successfully added!")
return redirect('sell')
else:
messages.error("Please fill in all the fields.")
else:
form = BookForm()
return render(request, 'Books/sell.html', {"form": form}
request.user 可以像上面一样分配给 rel_user
推荐阅读
- android - Android:根据用户设置以编程方式更改 SourceSet
- excel - VBA - 从所有模块受密码保护的工作簿中运行宏
- javascript - Cypress.io:如何创建有助于根据输入选择不同 DOM 元素的函数
- html - 如何让我的表单从页面顶部开始?每当单击“下一步”按钮时,都会一直滚动到底部
- c# - 密码类型 InputField 的文本只有星号
- excel - EXCEL:在将数据粘贴到 Excel 时自动调整列宽
- powershell - PowerShell 比较输出
- rest - 试图从请求中做一些断言,这将在响应中出现
- php - 拒绝所有 php 文件,但允许包含 php 文件的特定文件夹
- php - 如何使用 Gate::guessPolicyNamesUsing(function ($modelClass) 函数显式映射 AuthServiceProvider 中的策略?