2017-08-24 49 views
1

我正在創建一個使用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) 

也許日e ManyToManyField的Monkey修補程序?

+0

? Django的默認?我建議你重寫django的用戶模型(如何:https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#extending-the-existing-user-model)並實現你的聯繫關係那裏。 此外,該模型補丁似乎對我來說完全尷尬。最好放在模型中。 –

+0

請顯示您的用戶模型。 –

+0

我正在使用django all-auth作爲我的身份驗證並使用django的默認用戶模型 – King

回答

1

,如果你是猴子修補你應該是您使用的用戶模型中使用的User.add_to_class('following',models.ManyToManyField('self', through=Contact,related_name='followers', symmetrical=False))

代替

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

0

你的情況是錯誤的。您正在檢查當前登錄(會話)用戶中的用戶(作爲用戶名查詢過濾)追隨者列表。

相反它用於如果搜索或查詢用戶在當前登錄用戶追隨者列表的追隨者。

然後,它應該工作,它應該告訴你,而不是UnFollow。

或者按照這種方式搜索,獲取列表user_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 

在模板中使用該標誌。

+0

默認情況下,它應該算爲0追隨者'{%with total_followers = user.followers.count%} '但它不顯示0追隨者在屏幕上 – King

+0

它顯示默認多少追隨者?請告訴我。 –

+0

是的默認情況下,它應該顯示0追隨者,因爲沒有人跟隨該特定用戶 – King