我正在构建一个Web应用程序,人们可以在其中编写项目。这些项目存储在模型中,我想将用户用作外键,以便可以在网页上向用户显示他们的项目。实例是通过表单输入的。
该代码始终分配默认值(1),而不是用户。你们中有人可以看到导致此错误的原因吗?
以下是在models.py中创建模型的代码:
class PersonalProject(models.Model):
user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
description = models.TextField()
code = models.TextField()
def __str__(self):
return self.title
以下是用于在views.py中创建项目的表单视图的代码:
def newproject(request):
if User is None:
messages.error(request, "Must be signed in")
return redirect('main:dashboard')
if request.method == "POST":
form = NewProjectForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('main:dashboard')
else:
messages.error(request, "Error")
else:
form = NewProjectForm()
return render(request,
"main/newproject.html",
{"form":form})
这是views.py中主页视图的代码:
def dashboard(request):
messages.info(request, request.user.username)
return render(request=request,
template_name="main/dashboard.html",
context={"structuredprojects": StructuredProject.objects.all(), "personalprojects": PersonalProject.objects.filter(user__username=request.user.username)})
我真的希望您能提供帮助-我已经坚持了一段时间
您可以将包装在表单中的实例的用户设置为request.user
:
from django.contrib.auth.decorators import login_required
@login_required
def newproject(request):
if request.method == "POST":
form = NewProjectForm(request.POST, request.FILES)
if form.is_valid():
form.instance.user = request.user
form.save()
return redirect('main:dashboard')
else:
messages.error(request, "Error")
else:
form = NewProjectForm()
return render(request,
"main/newproject.html",
{"form":form})
注意:您可以使用
@login_required
装饰器[Django-doc]将视图限制为已认证用户的视图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句