我正在创建一个Web应用程序,允许用户创建一个todolist,他们可以添加,删除和编辑待办事项列表项(todos)。我使用django框架这样做,我已经让它在大多数情况下工作。到目前为止,我已经实现了从todolist添加,编辑和删除todos,我创建了一个超级用户,并且我能够使用我的超级用户登录该站点。
但是,我想让每个用户拥有自己独特的todolist。我不希望用户看到对方的东西。我是python和django的新手,我不知道该如何去做。我已经使用管理站点创建了一个测试用户,当我使用此测试用户登录时,我被带到具有相同(且唯一)待办事项列表的页面。我还没有为新用户实现注册页面,我希望在我这样做之前能够将用户链接到他们自己的todolists。这就是我到目前为止所做的:
// models.py
class Todo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
title = models.CharField(max_length=255)
text = models.TextField()
created_at = models.DateTimeField(default=datetime.now, blank=True)
def __str__(self):
return self.title
@receiver(post_save, sender=User)
def create_user_todos(sender, instance, created, **kwargs):
if created:
Todo.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_todos(sender, instance, **kwargs):
instance.todo.save()
// views.py
def index(request, user_id):
user = User.objects.get(pk=user_id)
todos = user.todo.objects.all()[:10]
context = {
'todos': todos # to pass them to index.html
}
return render(request, 'index.html', context)
def details(request, id, user_id):
user = User.objects.get(pk=user_id)
todo = user.todo.objects.get(id=id)
context = {
'todo': todo
}
return render(request, 'details.html', context)
def add(request, user_id):
user = User.objects.get(pk=user_id)
if(request.method == 'POST'):
title = request.POST['title']
text = request.POST['text']
todo = user.todo(title=title, text=text)
todo.save()
return redirect('/todos')
else:
return render(request, 'add.html')
def edit(request, id, user_id):
user = User.objects.get(pk=user_id)
todo = user.todo.objects.get(id=id)
context = {
'todo': todo
}
if(request.method == 'POST'):
title = request.POST['title']
text = request.POST['text']
if len(str(title)) != 0:
todo.title = title
if len(str(text)) != 0:
todo.text = text
todo.save()
return redirect('/todos')
else:
return render(request, 'edit.html', context)
def delete(request, id, user_id):
user = User.objects.get(pk=user_id)
todo = user.todo.objects.get(id=id)
context = {
'todo': todo
}
if(request.method == 'POST'):
Todo.delete(todo)
return redirect('/todos')
else:
return render(request, 'delete.html', context)
我之前正在关注一个教程,其中我将额外的参数user_id添加到views.py中的所有函数中。它现在给了我一个错误,但如果我不包括该参数并将我的函数实现更改为
todo = Todo.objects.get(id=id)
然后一切正常。
我意识到我的问题很模糊,我试图寻找解决方案,但我读过的所有内容都假设我对django有一些深入的了解(我不会这样做)。请带领我朝正确的方向前进:)