django中的用户关注系统

时间:2017-08-24 15:29:22

标签: python django

我正在使用django创建一个跟随系统和一个取消关注系统。我已经实现了每一个代码,似乎没有错误,除了事实上不是跟随它的初始按钮实际上是取消关注,如果我点击取消关注没有任何反应。下面是我的代码

details.html

{% extends 'base.html' %}
{% load staticfiles %}
{% load thumbnail %}
{% block title %}{{ user.get_full_name }}{% endblock %}
{% block content %}
<h1>{{ user.get_full_name }}</h1> <div class="profile-info">
{% thumbnail user.profile.photo "180x180" crop="100%" as im %} <img src="{{ im.url }}" class="user-detail">
{% endthumbnail %} </div>
{% with total_followers=user.followers.count %} <span class="count">
<span class="total">{{ total_followers }}</span>
follower{{ total_followers|pluralize }} </span>
<a href="#" data-id="{{ user.id }}" data-action="{% if request.user in user.followers.all %}un{% endif %}follow" class="follow button">
 {% if request.user not in user.followers.all %}
 Follow
 {% else %}
 Unfollow
  {% endif %}
</a>
<div  id="post-list" class="image-container">
{% include "axle.html" with objects=user.posts_created.all %}
</div>
{% endwith %}
{% endblock %}

  {% block domready %}
  $('a.follow').click(function(e){
    e.preventDefault();
    $.post('{% url "user_follow" %}',
    {
      id: $(this).data('id'), action: $(this).data('action')
    }, function(data){
          if (data['status'] == 'ok') {
            var previous_action = $('a.follow').data('action');
            // toggle data-action $('a.follow').data('action',
            previous_action == 'follow' ? 'unfollow' : 'follow'); // toggle link text
    $('a.follow').text(
         previous_action == 'follow' ? 'Unfollow' : 'Follow');
    // update total followers
    var previous_followers = parseInt(
    $('span.count .total').text());
    $('span.count .total').text(previous_action == 'follow' ? previous_followers + 1 : previous_followers - 1);
    } }
    ); });
  {% endblock %}

views.py

def user_detail(request, username):
    user = get_object_or_404(User, username=username,is_active=True)
    context = {
        'section': 'people',
        'user': user
    }
    template = 'user/detail.html'
    return render(request, template, context)

模型

class Contact(models.Model):
    """docstring for Contact."""
    user_from = models.ForeignKey(User, related_name='rel_from_set')
    user_to = models.ForeignKey(User, related_name='rel_to_set')
    created = models.DateTimeField(auto_now_add=True, db_index=True)

    class Meta:
        ordering = ('-created',)

    def __str__(self):
        return    '{} follows {}'.format(self.user_from, self.user_to)

models.ManyToManyField('self', through=Contact,related_name='followers', symmetrical=False)

也许是ManyToManyField的Monkey补丁?

1 个答案:

答案 0 :(得分:0)

你的情况是错误的。您正在检查用户当前是否已登录(会话)用户(已按用户名筛选为查询)关注者列表。

相反,如果搜索或查询用户位于当前登录用户关注者列表的关注者中,则使用它。

然后它应该工作,它应该显示Follow而不是UnFollow。

或者以这种方式搜索,获取list user_from联系表,其中from是当前登录用户,user_to是在详细视图中查询用户。

或在您的详细信息视图中。在登录的用户关注者列表中搜索查询的用户。把旗子放进去吧。在模板中使用该标志可以切换Follow或UnFollow。

follow_flag = False
query_set = request.user.followers_set.filter(username=user.username)
if query_set.exists():
    follow_flag = True

在模板中使用该标志。