【问题标题】:How to pass a user instance in a class-based view如何在基于类的视图中传递用户实例
【发布时间】:2018-03-07 21:21:54
【问题描述】:



我想将当前用户的用户实例传递给基于类的视图中的变量,并在第二步中,在 python 脚本中将其提供给定义为author = models.ForeignKey(User, on_delete=models.PROTECT) 的数据库表列。与该列相关,我收到以下完整性错误:NOT NULL constraint failed.. 从回溯中我可以看到我的变量loggedUser(我归因于self.request.user)是SimpleLazyObject

我发现another question 与我的相似。但它讨论了与函数相关的问题——我很难根据我的基于类的视图来调整答案。

如何传递我的用户实例?
谢谢!

models.py

​​>
from django.db import models
from django.contrib.auth.models import User

class Data(models.Model):
    temperature = models.FloatField(max_length=5)
    author = models.ForeignKey(User, on_delete=models.PROTECT) 


views.py

​​>
from . import apythonscript
from django.views.generic import TemplateView

class PlotGraphView(TemplateView):

    def get_context_data(self, **kwargs):
        loggedUser = self.request.user
        context['plot'] = apythonscript.putDataInDB(loggedUser)
        return context


apythonscript.py

​​>
from app.models import Data

def putDataInDB(loggedUser):
    mydata=json.loads(response)

    for line in mydata['feeds']:
    #    try:
        data_handle = Data(temperature=line['field1'], author=loggedUser,)
        data_handle.save()
    #    except:
    #        continue

追溯

link to traceback

【问题讨论】:

  • 你的问题我不清楚 - 你没有在任何地方使用你的 Data 模型。请同时包含完整的回溯。
  • 感谢您的反馈。我改编了这个例子。
  • 你还没有显示回溯。
  • 我的错。现在添加。谢谢!

标签: django django-models django-views


【解决方案1】:

要在 Django 中获取当前登录的用户,您可以简单地使用 request.user。在 CBV 中,request 是一个类对象,因此您应该使用 self.request 来访问请求数据。

示例

class PlotGraphView(LoginRequiredMixin, TemplateView):
    # your stuff

    def get_current_user(self):  # this is just a custom function, you don't 
        return self.request.user


所以,在CBV范围内的任何地方,都可以通过self.request.user访问当前用户

【讨论】:

  • 感谢您的帮助。您提供的解决方案对我不起作用。
  • 我在另一个部分搞砸了。 'self.request.user' 工作正常。
  • 你得到了预期的结果?
猜你喜欢
  • 1970-01-01
  • 2020-01-21
  • 2012-01-15
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多