django如何创建用户实例



我正在创建一个简单的应用程序,成功地为单个用户创建了应用程序,但我想为多个用户开发,但无法做到这一点…即用户a可以创建他的任务并保存在数据库中。类似的B用户可以创建任务并存储在数据库中。每个人都可以看到自己的任务。我是新手,无法继续创建实例。请有人指导我或给我指一个博客(在网上搜索但没有帮助(。我已经问过这个问题,但我不清楚(django每个用户都需要创建和查看数据问题(希望现在我清楚了。

我的型号:

从django.contrib.auth.models导入用户,AbstractUser从django.db导入型号

# Create your models here.
from django.db.models import Sum, Avg
class Task(models.Model):
user = models.ForeignKey(User, null=True,on_delete=models.CASCADE)
title = models.CharField(max_length=200)
complete = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True,auto_now=False,blank=True)
purchase_date = models.DateField(auto_now_add=False,auto_now=False,blank=True,null=True)
price = models.FloatField(max_length=5,default='0.00',editable=True)
def __str__(self):
return self.title
@classmethod
def get_price_total(cls):
total = cls.objects.aggregate(total=Sum("price"))['total']
print(total)
return total

视图

def createTask(request):
form = TaskForm()
if request.method =='POST':
form=TaskForm(request.POST)
if form.is_valid():
form.save()
return redirect('query')
context = {'form':form}
return render(request,'tasks/create.html',context)
def display(request):
#  tasks = Task.objects.all()
tasks = request.user.task_set.all()
form = TaskForm()
if request.method =='POST':
if form.is_valid():
form.save()
return redirect('/')
#    tasks= task.objects.all()
print("tasks",Task.get_price_total)
context = {'tasks':tasks,'form':form,'Totalprice':Task.get_price_total}
return render(request,'tasks/products.html',context)

urls

from django.urls import path
from . import views
urlpatterns = [
#path('', views.index, name="list"),
path('', views.query, name="query"),
path('create/', views.createTask, name="create"),
path('update_task/<str:pk>/', views.updateTask, name="update_task"),
path('register/', views.registerPage,name="register"),
path('login/', views.loginPage,name="login"),
path('logout/', views.logoutUser,name="logout"),
path('delete/<str:pk>/', views.deleteTask, name="delete"),
path('query/', views.query, name="query"),
path('products/', views.display, name="products"),
path('search/', views.showresults, name="search"),
]

错误(输出(

Internal Server Error: /products/
Traceback (most recent call last):
File "C:Userss5114509AppDataLocalProgramsPythonPython38libsite-packagesdjangocorehandlersexception.py", line 34, in inner
response = get_response(request)
File "C:Userss5114509AppDataLocalProgramsPythonPython38libsite-packagesdjangocorehandlersbase.py", line 124, in _get_response
raise ValueError(
ValueError: The view tasks.views.display didn't return an HttpResponse object. It returned None instead.
[21/Oct/2020 14:35:59] "GET /products/ HTTP/1.1" 500 60680

据我所知,当用户创建任务时,听起来很想保存任务。您不希望在表单中包含user字段。您必须首先获取TaskForm.save()方法返回的模型实例。现在您必须将user字段分配给request.user,因为用户已通过身份验证。以下是实现这一目标的方法。

def createTask(request):
form = TaskForm()
task = None
if request.method =='POST':
form=TaskForm(request.POST)
if form.is_valid():
#Just get the Task instance do not make any commitments to database
task = form.save(commit=False)
#Now update the user 
task.user = request.user
#Finally save to database
task.save()
return redirect('query')
context = {'form':form}
return render(request,'tasks/create.html',context)

在显示器上,您会收到一个错误,因为只有在发出POST请求时才会返回响应。检查您的标识并更正它。标识意味着python中的作用域。检查我已经修改了你的代码

def display(request):
#tasks = Task.objects.all()
tasks = request.user.task_set.all()
form = TaskForm()
if request.method =='POST':
if form.is_valid():
form.save()
return redirect('/')
#tasks= task.objects.all()
print("tasks",Task.get_price_total)

context = {'tasks':tasks,'form':form,'Totalprice':Task.get_price_total}
return render(request,'tasks/products.html',context)

看看python识别

最新更新