Как установить пользователя по умолчанию в качестве текущего объекта пользователя в 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)