【问题标题】:Retrieving current user id inside a function defined into class (CreateView)在定义到类 (CreateView) 的函数中检索当前用户 ID
【发布时间】:2025-05-25 18:30:02
【问题描述】:

是否可以使用 Django CreateView 将当前登录的用户 ID 检索到一个类中定义的函数中,在 views.py 中?

类似这样的:

class CreationClass(CreateView):
    model = Mymodel
    def creation(self, request):
        if request.method == 'POST':
            form = MyForm(request.POST or None)
            if form.is_valid:
                 form = myForm()
                 user_id = self.request.user.id
                 rel_table = Item_id_user ( item_id = form.id, user_id = request.user.id)
                 rel_table.save() #<--- this does not save, even if table exists
        return render(request, ''mypage.html')
        

这是我的models.py

class Item(models.Model):

     id_user = models.ManyToManyField(User, related_name='user_item', 
               verbose_name='id utente', through='Item_id_user')
     object = models.Manager()

     # table to handle relationship
class Item_id_user(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    id = models.IntegerField(primary_key=True)

我想要实现的是存储到 Item_id_user 中,但根本没有存储任何内容。我以为问题出在request.user.id

【问题讨论】:

  • 好吧,这不是我的问题。无论如何,如果我在终端打印 user_id,我看不到值...我在想我写的内容有错误...
  • 是的,我后来注意到并删除了我的答案。您可以按照您给出的示例使用它。如果 self.request 或 self.request.user 不可用,则会引发异常。

标签: python django sqlite model


【解决方案1】:

代替:

user_id = self.request.user.id

试试这个:

user_id = request.user.id

应该可以。

【讨论】:

  • 这有点奇怪,我将添加我的其余代码,因为这不起作用
  • 在第 9 行试试这个:rel_table = Item_id_user (item_id = form.id, user_id = request.user)
【解决方案2】:

我不明白为什么在验证表单后使用 form = MyForm() 重新初始化表单。我认为这可能会擦除其中包含的数据。你好像把它忘在那里了。

试试这个:

class CreationClass(CreateView):
model = Mymodel
def creation(self, request):
    if request.method == 'POST':
        form = ColumnCreationForm(request.POST or None)
        if form.is_valid:
             # form = myForm()
             user_id = self.request.user.id
             rel_table = Item_id_user ( item_id = form.id, user_id = request.user.id)
             rel_table.save() #<--- this does not save, even if table exists
    return render(request, ''mypage.html')

【讨论】:

  • 你是对的,我的错......但这并没有解决我的问题......在另一个函数中,我做同样的事情来存储在另一个关系表中(我正在使用 m2m)。存储没问题,在这个函数里