python - 如何将默认用户设置为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'>”
请帮助我完成这项任务。任何帮助深表感谢。
解决方案
您需要在表单验证时设置用户。不要忘记删除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)
推荐阅读
- c++ - 为什么这个c++模板场景无法编译:
- javascript - 从动态创建的表中获取输入元素的值
- apache-flink - Flink 键控窗口水印
- r - 使用shinymanager包多语言(取决于用户)制作shinyApp的最简单/最有效的方法是什么?
- javascript - 如何使用此脚本创建多个插入到 textarea 的按钮
- r - 如何将 (x,y) 与 R 中的新列 x 和 y 分开?
- java - 在字符串参数中设置枚举值
- javascript - ServiceWorker 无法缓存持久资产
- wordpress - 使用 Google API 密钥在我的网站上呈现 Google Drive 视频文件
- python - Selenium 无法识别路径