Django_Relation(Follow)


Follow

  • ManyToManyFiled作成後の移行
    class User(AbstractUser) :
        followings = models.ManyToManyField('self', symmetrical=False, related_name='followers')

    Symmetrical

  • ManyToManyFieldは、同じモデルを指す定義でのみ
  • を使用します.
  • 対称=True(デフォルト)の場合、Djangoはpersonsetマネージャを追加しません(Trueの場合、1番トレース2番の場合、2番自動トレース1番)
  • ソースモデルのインスタンスがターゲットモデルのインスタンスを参照する場合、ターゲットモデルのインスタンスもソースモデルのインスタンスを自動的に参照します.
  • つまり、もし私があなたの友达だったら、あなたも私の友达
  • です.
    対称性
  • を望まない場合は、False
  • に設定する.

    確認フィールド



    View

    def follow(request,user_pk) :
    
        me = request.user
        you = get_object_or_404(get_user_model(),pk=user_pk)
        if me!=you :
            if request.user in you.followers.all() :
                you.followers.remove(me)
            else :
                you.followers.add(me)
        return redirect('accounts:profile', you.username)

    html

    #profile.html
        {% if user != person %}
          <form action="{% url 'accounts:follow' person.pk %}" method="POST">
            {% csrf_token %}
            {% if user in person.followers.all %}
              <input type="submit" value="언팔">
            {% else %}
              <input type="submit" value="팔로우">
            {% endif %}
    
          </form>
        {% endif %}