我是Python& Django的。我想允许用户创建新对象,并使每个对象与当前登录的用户相关。所以,我以为我会使用通用的create_object方法 - 只是我无法弄清楚如何最好地做到这一点,所以它简单而安全。
这是我的模特:
class Book(models.Model):
user = models.ForeignKey(User, related_name='owner',
editable=False)
title = models.CharField(max_length=200,
help_text='A title for this entry')
author = models.CharField(max_length=200)
这是一个非常简单的模型 - 用户可以输入书名和作者,“用户”字段设置为不可编辑。创建对象时,我希望用户字段具有当前登录用户的值。
我可以使用通用的create_object方法吗?这里最好的方法是什么?我不想在表单中使用隐藏字段,因为它显然不安全。
由于
答案 0 :(得分:2)
我认为使用通用视图是不可能的(我可以想到一些方法来实现这一点,但这会比使用信号,全局和中间件更复杂)。您应该编写自己的视图,使用ModelForm处理Book对象的创建。阅读here和here(Django docs)。
另外,我认为你误解了related_name
参数的作用 - 现在,给定一些用户实例你必须写:
books = user.owner.all()
获取此用户的书籍列表。最好保持related_name
不变(默认为relatedmodelname_set
,在这种情况下为:user.book_set.all()
)或将其更改为更有意义的内容,例如"books"
,让你写:
books = user.books.all()
得到你想要的东西。