Как установить пользователя по умолчанию в качестве текущего объекта пользователя в django?

Я создал мини-проект под названием ToDoList App. Я использовал представления на основе классов для функций создания, обновления и удаления. На панели навигации есть иконка MyTasks.

Что я хочу?
Я хочу установить пользователя по умолчанию в качестве текущего зарегистрированного пользователя. Задачи одного человека не должны быть видны другому человеку.

Я пробовал все решения, но ничего не помогает.

Вот мой код в файле models.py:

class MyTasks(models.Model):
    user = models.ForeignKey(User, on_delete=CASCADE, related_name="mytasks")
    task_id = models.AutoField(primary_key=True, verbose_name="ID")
    task_title = models.CharField(max_length=100, default="", help_text="The title of the task", verbose_name="Task Title", blank=False)
    task_desc = models.TextField(default="", help_text="The description of task", verbose_name="Task Description", blank=False)
    task_time = models.DateTimeField(default=timezone.now(), verbose_name="Task Date & Time")
    task_completed = models.BooleanField(default=False, verbose_name="Task Completed")

    def save(self, *args, **kwargs):
        self.user = User
        super(MyTasks, self).save(*args, **kwargs)

    def __str__(self):
        return self.task_title

Вот мой код в файле views.py:

def signup(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f"{username.capitalize()}, you have successfully created an account")
            return redirect("home")
    else:
        form = UserCreationForm()
    return render(request, 'signup.html', context={'form':form})

class TaskCreateView(SuccessMessageMixin, CreateView):
    """View to create new task."""
    model = MyTasks
    context_object_name = 'task'
    template_name = 'task_create.html'
    raise_exception = True
    success_message = 'Task successfully created!'
    fields = ['task_title', 'task_desc', 'task_time']
    success_url = reverse_lazy('task_list')

Когда я использовал метод save для выполнения задачи, он выдает следующую ошибку:

ValueError: Невозможно присвоить "<class 'django.contrib.auth.models.User'>"

.

Пожалуйста, помогите мне решить эту задачу. Любая помощь будет высоко оценена.

  • В вашем представлении. Если пользователь вошел в систему, вы можете использовать

    request.user
    

    Если вы покажете мне ваше представление, я смогу помочь вам больше с этим.

    ... И измените атрибут user в классе MyTask на

    .
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=CASCADE, related_name="mytasks")
    

    затем установите AUTH_USER_MODEL в settings.py в

    AUTH_USER_MODEL = 'app-where-is-user-model.model-name'

- используйте точечную нотацию для этой строки.

Вам необходимо установить пользователя при валидации формы. Не забудьте удалить функцию save на вашей модели. Это не будет работать.

from django.views.generic.edit import CreateView


class TaskCreateView(SuccessMessageMixin, CreateView):
    """View to create new task."""
    model = MyTasks
    context_object_name = 'task'
    template_name = 'task_create.html'
    raise_exception = True
    success_message = 'Task successfully created!'
    fields = ['task_title', 'task_desc', 'task_time']
    success_url = reverse_lazy('task_list')

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)
Вернуться на верх