我正在使用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补丁?
答案 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
在模板中使用该标志。