gpt4 book ai didi

python - 将当前用户传递给 Django 中 CreateView 的初始用户

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:17 24 4
gpt4 key购买 nike

在我的项目中,我有来自标准 auth Django 模型和 Todo 模型的 User 模型。用户可以有多个 Todo。

当登录用户创建待办事项时,他必须自动分配给待办事项。我想将当前用户传递给 CreateView 的初始数据。在我看来,我走在正确的道路上。这是表单对象的样子:

class TodoView(CreateView):
model = Todo
fields = ('name', 'date')

success_url = '/todos/'

def get_initial(self):
return {
'user': self.request.user
}

这是一个模型:

class Todo(models.Model):
user = models.ForeignKey(User)
name = models.TextField()
date = models.DateField()

但似乎这还不够,因为当有效数据来自客户端时我有一个异常。这是异常(exception)情况:

IntegrityError at /todos/new

todos_todo.user_id may not be NULL

Request Method: POST
Request URL: http://localhost:8000/todos/new
Django Version: 1.6.2
Exception Type: IntegrityError
Exception Value:

todos_todo.user_id may not be NULL

Exception Location: /Library/Python/2.7/site-packages/django/db/backends/sqlite3/base.py in execute, line 450
Python Executable: /usr/bin/python
Python Version: 2.7.5

是否有可能将当前用户传递给 CreateView 的模型?如何在 Django 的最佳实践中做到这一点?

最佳答案

您需要使用 form_valid方法而不是 get_initial。像这样:

def form_valid(self, form):
form.instance.user = self.request.user
return super(TodoView, self).form_valid(form)

我从未使用过 get_initial,但我猜它不会做任何事情,因为您没有包含 user 字段。无论如何这都没有用,因为您不希望用户能够更改该值。

关于python - 将当前用户传递给 Django 中 CreateView 的初始用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22238663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com