django - 用外键自动填充我的作者字段
问题描述
我正在尝试使用 django 中的身份验证在我的笔记项目中自动填充我的用户外键。我试过了,但它不起作用,并要求所有者是必填字段。请帮忙!预先感谢。
视图.py
@login_required(login_url='login')
def index(request):
tasks = Task.objects.filter(owner=request.user)
form = TaskForm()
if request.method=='POST':
form = TaskForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.owner = request.user
instance.save()
context = {
'tasks':tasks,
'form':form,
}
return render(request, 'list.html',context)
模型.py
class Task(models.Model):
title = models.CharField(max_length=200)
completed = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
def __str__(self):
return self.title
解决方案
由于您自己填写所有者,因此将所有者指定为表单字段是没有意义的。因此,您应该排除它,并让视图处理它。因此,表格如下所示:
class TaskForm(forms.ModelForm):
class Meta:
model = Task
exclude = ['owner']
如果ModelForm
不需要指定所有者,您可以将该字段标记为不可编辑:
class Task(models.Model):
# …
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
editable=False
)
# …
推荐阅读
- json - dotnet publish 不使用 appsettings.json
- reactjs - 如果条件为真,则在子组件中调用函数
- javascript - 你能在一个函数中拦截并创建一个 AxiosPromise 吗?
- java - 根据原始图像分辨率将图像大小调整为字节大小以下的算法
- java - android.widget.FrameLayout 无法转换为 androidx.appcompat.widget.Toolbar 错误
- php - 在 PHP 中,我可以为类属性设置别名吗?例如通过 Trait 允许 ArrayAccess 方法
- javascript - 在Javascript中将对象转换为数组
- microsoft-graph-api - 使用“@azure/msal-angularjs”:“^0.1.1”将 Graph API 工具包避免登录组件与通过 Azure AD 进行身份验证的现有应用程序集成
- c++ - 使用 fcntl 和 C++ 锁定 Linux 文件
- python - discord.py - “member” 参数总是返回一个字符串,即使使用转换器 discord.User