如何在基于类的视图中传递用户实例

时间:2018-03-07 21:21:55

标签: django django-models django-views



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

我发现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

1 个答案:

答案 0 :(得分: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

访问当前用户