django-tables2:在渲染方法中使用请求用户

2024-01-19

我正在使用 djnago-tables2 显示事件模型中的数据。我需要将当前请求用户放入表的渲染方法中(以进一步调用模型函数来获取当前用户的响应)。

我怎样才能做到这一点?

My Model

class Event(models.Model):

    name=models.CharField(max_length=254)
    start=models.DateTimeField()
    end=models.DateTimeField()
    invited_user=models.ManyToManyField(User,blank=True)

    def getResponseFromUser(self, user):
        try:
            return Response.objects.filter(event=self, user=user).order_by('-pk')[0]
        except Exception:
            return None

class Response(models.Model):
    user=models.ForeignKey(User)
    event=models.ForeignKey(Event)
    timestamp=models.DateTimeField(auto_now_add=True)

    SEEN=0
    YES=1
    PROBABLY_YES=2
    PROBABLY_NO=3
    NO=4

    RESPONSE=(
        (SEEN, _('seen but undecided')),
        (YES, _('Yes')),
        (PROBABLY_YES, _('probably yes')),
        (PROBABLY_NO, _('probably no')),
        (NO, _('No')),
    )
    response=models.IntegerField( choices=RESPONSE, default=SEEN)

    @property
    def getResponseText(self):
        return self.RESPONSE[self.response][1]

Table

class EventTable(tables.Table):

    requestUser=None # to be set from request (externally)

    eventResponse = tables.Column(empty_values=(), verbose_name="Response", orderable=False)

    class Meta:
        model = Event
        # add class="paleblue" to <table> tag
        attrs = {"class": "table"}
        exclude=['id', 'user_can_invite', 'description', 'organizer']

    def render_eventResponse(self, record):
        responseObject=record.getResponseFromUser(self.requestUser)
        if not responseObject:
            return ''
        else:
            return responseObject.getResponseText

View

class PersonalEventTableView(SingleTableView):
    model = Event
    table_class = EventTable
    template_name = 'list_events.html'
    paginate_by = 50

在 urls.py 中,视图使用 PersonalEventTableView.as_view() 呈现

有人可以帮忙吗?


您可以非常简单地将请求添加到表的上下文中。

class PersonalEventTableView(SingleTableView):
    model = Event
    table_class = EventTable
    template_name = 'list_events.html'
    paginate_by = 50

    def get_context_data(self, **kwargs):
        """ Override SingleTableView class method """
        context = super(SingleTableMixin, self).get_context_data(**kwargs)
        table = self.get_table(**self.get_table_kwargs())
        
        # add the request directly to your table
        table.request = self.request
        context[self.get_context_table_name(table)] = table
        return context

现在它将在您的 Table 类中可用。

类 EventTable(tables.Table):

eventResponse = tables.Column(empty_values=(), verbose_name="Response", orderable=False)

class Meta:
    model = Event
    attrs = {"class": "table"}
    exclude=['id', 'user_can_invite', 'description', 'organizer']

def render_eventResponse(self, record):
    # self.request.user is available
    responseObject=record.getResponseFromUser(self.request.user)
    return responseObject.getResponseText if responseObject else ""
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django-tables2:在渲染方法中使用请求用户 的相关文章

随机推荐

  • 更新到 macos mavericks 后 gem install autotest-fsevent 失败

    更新到 Maveriks 后安装 gem 时遇到问题autotest fsevent 这是我得到的错误 Mellon public lasdolphin sudo gem install autotest fsevent Building
  • 是否有跨平台方法可以将资源嵌入到用 C++ 编写的二进制应用程序中? [复制]

    这个问题在这里已经有答案了 我试图将一些资源 图像 音乐和数据文件 捆绑到我的二进制应用程序 用 C 编写 中 我希望将所有内容都包含在一个可执行文件中 这样我就可以发送 大 可执行文件并且它可以工作 不能删除任何资产 我看到 Visual
  • .animate 回调函数之后的 .done

    我想在 animate 回调函数之后调用一个函数 我正在使用 done 方法来实现此目的 但它不起作用 fiddle http jsfiddle net dWAP4 function button click function div an
  • 向特定用户授予文件访问权限[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在Linux中 如何向特定人员授予文件 文件夹的访问权限 换句话说 假设我只想允许只有用户 fred 能够读取文件 那么我该怎么做呢 请注意 我了解
  • 密码验证C++

    嗨 这是我第一次使用课程 所以对我糟糕的解释表示歉意 基本上我正在为电梯程序制作密码功能 LogIn 是我的类的名称 其中包含字符串 john 它是密码 除了错误密码尝试的循环之外 一切似乎都工作正常 如果第一次密码尝试正确 则代码可以正常
  • 成员函数特征

    我正在编写一个模板类 它包装成员函数以减少一些调用 如果某些条件为真 则不需要调用成员函数 签名看起来像这样 template
  • heroku 上的数据库名称以及用户、密码和主机

    我想在heroku 上安装一个带有数据库的php 脚本 如何获取我安装的数据库的数据库名称 密码 用户和主机信息 Heroku 上有多种不同的数据库 您可以查看选项并将它们添加到您的应用程序中 addons heroku com https
  • 如何调试 grails 命令

    当我运行 dbm generate changelog 时 抛出异常 我想调试这个脚本 但我不知道该怎么做 我尝试在脚本文件中放置断点 DatabaseMigrationCommon groovy然后在 eclipse 中创建新的 debu
  • AngularJS - 多次 ng-click - 事件冒泡

    在以下示例中 li h3 item title h3 li
  • Android 上的生物识别提示副标题文本被截断

    我已经实现了生物识别身份验证 其中我的副标题 验证用户名的生物识别信息以登录到我的App Name 有点长 最后会被截断 这主要发生在三星设备上 任何字符长度限制或 OEM 问题都无法解决 他们必须为此提出一个解决方案 因为我们无法控制它
  • 开发 Internet Explorer、浏览器辅助对象扩展?

    1 我正在尝试用 C 创建一个简单的 BHO 就像这里已经回答的那样 https stackoverflow com a 5740004 285594 https stackoverflow com a 5740004 285594 2 但
  • 沿最后一个维度索引 numpy nd 数组

    有没有一种简单的方法使用索引数组沿最后一个维度对 numpy 多维数组进行索引 例如 取一个数组a形状的 10 10 20 假设我有一个索引数组b 形状 10 10 这样结果就是c i j a i j b i j 我尝试过以下示例 a np
  • 仅向上缩放 Three.js 几何体

    我正在尝试缩放几何图形 y 轴 这使得我的立方体既放大又缩小 我认为 mesh transformY 可以将立方体动画放大到缩放值的一半 这会让立方体看起来像是向上缩放的 还有其他解决方案吗 var geometry new THREE B
  • 创建只能查看一个数据库并只能从中进行选择的用户?

    我们在 SQL Server 上有多个数据库 我们想要创建 1 个新用户 该用户可以查看数据库 c 但看不到其余数据库 该用户应该只能从此数据库中进行选择 而不能进行其他选择 我已经用谷歌搜索了一段时间 我发现的最接近的是拒绝查看任何数据库
  • 如何使用 phantomJS 模拟鼠标悬停在 HTML 元素上

    我有下面的 phantomJS 代码来获取 HTML 代码 var page require webpage create var url http example com page open url function status var
  • Debian 8 上的 Python numba / llvmlite - 我无法构建 llvmlite

    我尝试在 Debian 8 系统上安装 numba 如下所述 http llvmlite pydata org en latest install index html http llvmlite pydata org en latest
  • 如何在 .net x64 中保存/加载 16 位图像?

    以前 当我使用win32时 我使用自由图像 http freeimage sourceforge net 为了加载和保存位深度大于 8 位的位图 这就是我处理的每张图像 因为我正在做医学成像 在任何人说什么之前 是的 我和我的客户已经花了很
  • Java Web 应用程序中的异步任务

    异步作业 例如从网站下载乐谱 或在完成某些关键任务后发送电子邮件 现在 当我们下载一些乐谱时 我们必须在当前页面等待才能获取响应页面或下载文件 是否有可能我可以点击下载乐谱 它会在后台发生 以便我可以导航到其他部分 网站 同时检查工作状态
  • 我只想有字符(根本没有符号、数字和空格)

    应该用 SQLite 完成 像这样 是的 我知道 这是很容易的任务 如果我使用UDF 用户定义函数 但是 我对此有很大的困难 所以 寻找另一种方式 no UDF方式 来实现我的目标 Thanks 供你参考 我留下了一个我未能制作UDF的链接
  • django-tables2:在渲染方法中使用请求用户

    我正在使用 djnago tables2 显示事件模型中的数据 我需要将当前请求用户放入表的渲染方法中 以进一步调用模型函数来获取当前用户的响应 我怎样才能做到这一点 My Model class Event models Model na