Django: как сделать ссылку на указанного c пользователя? - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь создать сайт с функцией To-do! Пока что я запрограммировал его так, чтобы он отлично работал с одним пользователем. Однако, когда я вхожу в систему под другим пользователем, я все еще могу просматривать свой список дел, и мне это не нужно.

Теперь я был бы очень рад, если бы смог указать это c функция, доступная большому количеству людей. поэтому этот человек входит в свою учетную запись, создает свой собственный список / я вхожу в свой и создаю свой собственный.

Я искал так много руководств и статей на YouTube, ни один из них не помог :( Это ' Будет здорово, если я смогу решить эту проблему здесь, с большой помощью таких экспертов по кодированию, как вы!

Вот мой код, связанный с функцией To-do

Views.py

def ToDo(request):
    todos = TodoList.objects.all()
    categories = Category.objects.all()
    if request.method == "POST":
        if "taskAdd" in request.POST:
            title = request.POST["description"]
            date = str(request.POST["date"])
            category = request.POST["category_select"]
            content = title + " -- " + date + " " + category
            Todo = TodoList(title=title, content=content, due_date=date, 
                            category=Category.objects.get(name=category))
            Todo.save()
            return redirect("/to_do")
        if "taskDelete" in request.POST:
            print(request.POST)
            checkedlist = request.POST.getlist('checkedbox')
            for todo_id in checkedlist:
                todo = TodoList.objects.get(id=int(todo_id))
                todo.delete()
    return render(request, 'Todolist.html', {"todos": todos, "categories":categories})

models.py

class TodoList(models.Model):
    title = models.CharField(max_length=250)
    content = models.TextField(blank=True)
    created = models.DateField(default=timezone.now().strftime("%Y-%m-%d"))
    due_date = models.DateField(default=timezone.now().strftime("%Y-%m-%d"))
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    class Meta:
        ordering = ["-created"]

    def __str__(self):
        return self.title

Todo. html

<div django-app="TaskManager">
<div class="container">
        <div class="content">
        <h2 style="text-align: center">Tasks are listed here!</h2>
        <p class="tagline">Jayden's To-Do system</p>
        <form action="" method="post">
        {% csrf_token %}
            <div class="inputContainer">
                <label for="category">What should I do??</label>
                <input type="text" id="description" class="taskName" placeholder="Task Description" name="description" required>

            </div>
            <div class="inputContainer half last">
                <i class="fa fa-caret-down selectArrow"></i>
                <label for="category">Course?</label>
                <select id="category" class="taskCategory" name="category_select">
                <option class="disabled" value="">Choose the course</option>
                {% for category in categories %}
                    <option class="" value="{{ category.name }}" name="{{ category.name }}">{{ category.name }}</option>
                {% endfor %}
                </select>

            </div>
            <div class="inputContainer half last right">
                <label for="dueDate">Until when? (Due Date)</label>
                <input type="date" id="dueDate" class="taskDate" name="date">

            </div>
            <div class="row">
                <button class="taskAdd" name="taskAdd" type="submit"><i class="fa fa-plus icon"></i>Add task</button>
                <button class="taskDelete" name="taskDelete" formnovalidate="" type="submit" onclick="$('input#sublist').click();"><i class="fa fa-trash-o icon"></i>Delete Tasks</button>
            </div>
        <ul class="taskList">
        {% for todo in todos %}
            <li class="taskItem">
                <input type="checkbox" class="taskCheckbox" name="checkedbox" id="{{ todo.id }}" value="{{ todo.id }}">
                <label for="{{ todo.id }}"><span class="complete-">{{ todo.title }}</span></label>
                <span class="category-{{ todo.category }}">{{ todo.category }}</span>
                <strong class="taskDate"><i class="fa fa-calendar"></i>{{ todo.created }} - {{ todo.due_date }}</strong>
            </li>
        {% endfor %}
        </ul>
        </form>
        </div>

Может ли кто-нибудь помочь мне сделать это c пользователям? Спасибо !!

1 Ответ

1 голос
/ 05 августа 2020

Сначала ваша модель TODO должна быть связана с пользователем

from django.conf import settings

class TodoList(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=250)

Когда вы создаете задачу, свяжите ее с пользователем

def ToDo(request):
    ...
    Todo = TodoList(user=request.user, title=title, content=content, due_date=date, 
                            category=Category.objects.get(name=category))
Todo.save()
    ...

Когда вы получаете список, вам нужно для фильтрации по пользователю

def ToDo(request):
    todos = ToDo.objects.filter(user=request.user)
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...