如何在django getstream中添加关注按钮以进行配置文件

时间:2018-03-03 12:32:46

标签: django python-3.x getstream-io

我尝试使用Getstream.io应用在django中添加关注按钮。

在getstream教程django twitter之后,我设法创建了一个用户列表,其中包含一个正常运行的关注按钮以及活动活动源。但是当我尝试在用户个人资料页面上添加关注按钮时,表单发送POST但后来没有任何事情发生。

我花了很多时间尝试解决这个问题,但我仍然在Django打招呼。

代码:

关注模特:

class Follow(models.Model):
        user = models.ForeignKey('auth.User', related_name = 'follow',         on_delete = models.CASCADE)
        target = models.ForeignKey('auth.User', related_name ='followers', on_delete=models.CASCADE)
        created_at = models.DateTimeField(auto_now_add = True)

        class Meta:
            unique_together = ('user', 'target')

    def unfollow_feed(sender, instance, **kwargs):
        feed_manager.unfollow_user(instance.user_id, instance.target_id)

    def follow_feed(sender, instance, **kwargs):
        feed_manager.follow_user(instance.user_id, instance.target_id)

    signals.post_delete.connect(unfollow_feed, sender=Follow)
    signals.post_save.connect(follow_feed, sender=Follow)

查看:

def user(request, username):
    user = get_object_or_404(User, username=username)
    feeds = feed_manager.get_user_feed(user.id)
    activities = feeds.get()['results']
    activities = enricher.enrich_activities(activities)
    context = {   
        'user': user,
        'form': FollowForm(),
        'login_user': request.user,
        'activities': activities,
    }
    return render(request, 'profile/user.html', context)

def follow(request):
    form = FollowForm(request.POST)
    if form.is_valid():
        follow = form.instance
        follow.user = request.user
        follow.save()
    return redirect("/timeline/")

def unfollow(request, target_id):
    follow = Follow.objects.filter(user=request.user, target_id=target_id).first()
    if follow is not None:
        follow.delete()
    return redirect("/timeline/")

形式:

class FollowForm(ModelForm):

    class Meta:
        exclude = set()
        model = Follow

网址:

path('follow/', login_required(views.follow), name='follow'),
path('unfollow/<target_id>/', login_required(views.unfollow),  name='unfollow'),

和user.html

<form action="{% if request.user in User.followers.all %}{% url 'unfollow' target.id %}{% else %}{% url 'follow' %}{% endif %}" method="post">
        {% csrf_token %}
        <input type="hidden" id="id_target" name="target" value="{{target.id}}">
        <input type="hidden" id="id_user" name="user" value="{{user.id}}">
                              <button type="submit" class="btn btn-primary btn-sm" value="Create" />
        {% if request.user in User.followers.all %}
        Unfollow
        {% else %}
        Follow
        {% endif %}
        </button> 
</form>

此表单在列表用户页面中工作:

 {% for one, followed in following %}
  <div class="col-md-3 col-sm-6 col-xs-12">
      <div class="card">
        <div class="card-body">
      {% include "profile/_user.html" with user=one %}
       <form action="{% if followed %}{% url 'unfollow' one.id %}{% else %}{% url 'follow' %}{% endif %}" method="post">
        {% csrf_token %}
        <input type="hidden" id="id_target" name="target" value="{{one.id}}">
        <input type="hidden" id="id_user" name="user" value="{{user.id}}">
        <button type="submit" class="btn btn-primary btn-sm" value="Create" />
        {% if followed %}
          Przestań obserwować
        {% else %}
          Obserwuj
        {% endif %}
        </button> 
      </form>
      </div>
      </div>
    </div>
    {% if forloop.counter|divisibleby:'4' %}
    <div class="clearfix visible-sm-block visible-md-block visible-lg-block"></div>
    {% elif forloop.counter|divisibleby:'2' %}
    <div class="clearfix visible-sm-block"></div>
    {% endif %}
  {% endfor %}
  </div>

用户列表Views.py

def discover(request):
    users = User.objects.order_by('date_joined')[:50]
    login_user = User.objects.get(username=request.user)
    following = []
    for i in users:
        if len(i.followers.filter(user=login_user.id)) == 0:
            following.append((i, False))
        else:
            following.append((i, True))
    login_user = User.objects.get(username=request.user)
    context = {
        'users': users,
        'form': FollowForm(),
        'login_user': request.user,
        'following': following
    }
return render(request, 'uzytkownicy.html', context)

0 个答案:

没有答案