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

2024-04-19 17:56:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python&Django新手。我想允许用户创建新的对象,并且每个对象都与当前登录的用户相关。所以,我想我应该使用泛型的create\u 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)

这是一个非常简单的模型-用户可以输入书名和作者,“用户”字段设置为不可编辑。创建对象时,我希望user字段具有当前登录用户的值。你知道吗

我可以用泛型的create\u object方法来实现吗?最好的方法是什么?我不想在表单中使用隐藏字段,因为它显然不安全。你知道吗

谢谢


Tags: 对象django方法用户模型objecttitlemodels
1条回答
网友
1楼 · 发布于 2024-04-19 17:56:19

我认为使用泛型视图是不可能的(我可以想出一些方法来实现这一点,但这比使用信号、全局和中间件要复杂得多)。您应该编写自己的视图,该视图将使用ModelForm处理Book对象的创建。阅读herehere(Django文档)。你知道吗

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

books = user.owner.all()

获取此用户的书籍列表。最好是保持related_name不变(默认值为relatedmodelname_set,在本例中为:user.book_set.all()),或者将其更改为更有意义的内容,如"books",这样您就可以编写:

books = user.books.all()

得到你想要的。你知道吗

相关问题 更多 >