将todolist链接到用户

时间:2018-03-17 03:44:56

标签: python django django-views django-users

我正在创建一个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有一些深入的了解(我不会这样做)。请带领我朝正确的方向前进:)

0 个答案:

没有答案