将一般创建的Django对象与用户相关联

时间:2010-07-31 08:44:58

标签: python django

我是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方法吗?这里最好的方法是什么?我不想在表单中使用隐藏字段,因为它显然不安全。

由于

1 个答案:

答案 0 :(得分:2)

我认为使用通用视图是不可能的(我可以想到一些方法来实现这一点,但这会比使用信号,全局和中间件更复杂)。您应该编写自己的视图,使用ModelForm处理Book对象的创建。阅读herehere(Django docs)。

另外,我认为你误解了related_name参数的作用 - 现在,给定一些用户实例你必须写:

books = user.owner.all()

获取此用户的书籍列表。最好保持related_name不变(默认为relatedmodelname_set,在这种情况下为:user.book_set.all())或将其更改为更有意义的内容,例如"books",让你写:

books = user.books.all()

得到你想要的东西。