从django中的模型方法获取request.session

从django中的模型方法获取request.session,django,model,methods,Django,Model,Methods,Hay,是否可以从django中的模型方法获取request.session值 大型更新 这是我的模型 class GameDiscussion(models.Model): game = models.ForeignKey(Game) message = models.TextField() reply_to = models.ForeignKey('self', related_name='replies', null=True, blank=True) cr

Hay,是否可以从django中的模型方法获取request.session值

大型更新

这是我的模型

class GameDiscussion(models.Model):
    game = models.ForeignKey(Game)
    message = models.TextField()
    reply_to = models.ForeignKey('self', related_name='replies', null=True, blank=True)
    created_on = models.DateTimeField(blank=True, auto_now_add=True)
    userUpVotes = models.ManyToManyField(User, blank=True, related_name='threadUpVotes')
    userDownVotes = models.ManyToManyField(User, blank=True, related_name='threadDownVotes')
    votes = models.IntegerField()

    def html(self):
        DiscussionTemplate = loader.get_template("inclusions/discussionTemplate")
        return DiscussionTemplate.render(Context({
            'discussion': self,
            'replies': [reply.html() for reply in self.replies.all().order_by('-votes')]
    }))

    def _find_users_who_have_voted(self):
        user_list = []
        for user in self.userDownVotes.all():
            user_list.append(user.id)
        for user in self.userUpVotes.all():
            user_list.append(user.id)   
        return user_list

    users_voted = property(_find_users_who_have_voted)
我的观点是这样的

<ul>
    {% for discussion in discussions %}
        {{ discussion.html }}
    {% endfor %}
</ul>
    {%用于讨论中的讨论%} {{discussion.html} {%endfor%}
模板呢

<li>
<small>
    ({{ discussion.votes }} votes) 

    {% if user_id not in discussion.users_voted %}

      user not in list!

    {% endif %}     

</small>
<strong>{{ discussion.message }}</strong> 
{% if replies %}
    <ul>
        {% for reply in replies %}
            {{ reply }}
        {% endfor %}
    </ul>
{% endif %}
  • ({{discussion.voces}}}票) {%如果用户id不在讨论中。用户投票%} 用户不在列表中! {%endif%} {{discussion.message}} {%if答复%}
      {%用于答复中的答复%} {{回复} {%endfor%}
    {%endif%}
  • 值“user_voted”返回对此讨论进行投票的用户ID列表


    我想查看request.session['user'].id值是否在此列表中

    您可以使用threadlocals中间件访问当前用户及其会话

    但请记住:

    也许有更好的办法来解决你的问题。也许您想详细说明为什么需要模型级的request.session

    更新:

    既然您显式地调用了某个方法(可能是从视图调用的),为什么不将
    request.user
    作为
    html
    方法的参数呢

    models.py:

    def html(self, user):
        your code...
    
    views.py:

    yourmodel.html(request.user)
    
    更新您的超级更新

    这正是{%include%}的用途:

    在第一个模板中,执行以下操作:

    {% for discussion in discussions %}
        {% include "discussion.html" }}
    {% endfor %}
    
    第二个模板的命名空间中有request.user.id:

    {% if request.session.user.id not in discussion.users_voted %}
      user not in list!
    {% endif %}     
    

    为什么不在视图中使用Django的
    render_to_string
    ,这样可以很好地使用请求,并完全避免使用model方法呢


    更新:在浏览了mega更新之后,您应该查看Django的,并使用模型中的数据来填充模板,而不是使用模型来呈现模板。将模型和模板分开-Django是一个MVT/MCV框架,理由很充分:)

    我正在使用模型解析模板,但我需要向它传递上下文。但是,当解析模板时,我无权访问request.session(我正在将request.session值与另一个值进行比较)