Как я могу выполнить итерацию по списку подписчиков пользователя и каждого из подписчиков подписчика в шаблоне?

#django #django-models #django-rest-framework #django-views #django-forms

#django #django-модели #django-rest-framework #django-просмотры #django-forms

Вопрос:

Я снова задаю этот вопрос, потому что я не получил удовлетворительного ответа в своей предыдущей попытке. Мне может быть трудно полностью передать проблему, которую я пытаюсь решить, но я сделаю все возможное, чтобы дать четкое и краткое объяснение.

введите описание изображения здесь.

Я пытаюсь выполнить запрос, который извлекает список подписчиков, а также список подписчиков и подписчиков для каждого подписчика. Я включил изображение, которое иллюстрирует эту структуру. В настоящее время я использую следующий код, чтобы попытаться это сделать, но он не дает ожидаемых результатов. Можете ли вы помочь мне понять, что я делаю неправильно и как я могу правильно выполнить этот запрос?

 views.py  
   def get_context_data(self, *args, **kwargs):
        context = super(FollowerView,self).get_context_data(*args, **kwargs)
        user = context['user']
        user_com = User.objects.get(username=user)
        myfollowers = user_com.is_following.all()
        
        followers_Array =[]
        followerings_Array =[]
        
        for target_list in myfollowers:
            user_obj = User.objects.get(username=target_list)

            followers_obj = user_obj.is_following.all()
            print(followers_obj,'name o  ki line')
            followerings_Array.append(followerings_Array)
            print(followers_obj,user_obj)

            followerings_obj = user_obj.userprofile.follower.all()
            followerings_Array.append(followerings_obj)
            print(followerings_obj,user_obj)
        print(followerings_Array,'arry one one one ')
        context['myfollowers_data']= followers_Array
        context['myfollowerings_data']= followerings_Array
         
        return context
  

В настоящее время я использую два массива в своем коде, но я бы предпочел избежать этого, если это возможно. Моя текущая реализация не дает желаемого результата, когда я возвращаю массивы в контексте. Можете ли вы предложить альтернативный подход, который позволяет мне отображать данные так, как показано на рисунке, и можете ли вы просмотреть шаблон подписчиков, чтобы увидеть, допускаю ли я там какие-либо ошибки?

 {% for follower in user.is_following.all %}
                <div class="followers-body">
                 <img class="img-responsive img-circle" src="{{follower.avatar.url}}" alt="">
                 <div class="name-box">
                 
                  <h4>{{follower}}</h4>
                  <span>@{{follower}}</span>
                  <div class="followers-base">
                   <ul class="list-group">
                    <li class="list-group-item full-width">
                     <div class="pull-left" style="margin-right: 20px;">
                     {% if myfollowers_data %}
                     {% for user in myfollowers_data %}
                      <img src="{{user.userprofile.avatar.url}}" alt="" class="img-circle max-w-40 ">
                      {% endfor %}
                      {% endif %}
                      <span> {{myfollowers_data.count}} Followers </span>
                     </div><!--/ pull-left -->
                    </li> 
                    <li class="list-group-item full-width">
                     <div class="pull-left">
                       {% for usr in myfollowerings_data %}
                      <img src="{{usr.userprofile.avatar.url}}" alt="" class="img-circle max-w-40 ">
                      {% endfor %}
                      <span> {{myfollowerings_data|length}}  Following </span>
                     </div><!--/ pull-right -->
                    </li><!--/ list-group-item -->                     
                   </ul>
                  </div><!--/ followers-base -->
                 </div><!--/ name-box -->
                 <span><a href="#" class="kafe-btn kafe-btn-mint-small"> Follow</a></span>
                </div><!--/ followers-body -->
                {% endfor %}

models.py
class UserProfile(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    follower = models.ManyToManyField(User, related_name ='is_following',blank=True,)
    close_friends = models.ManyToManyField(User,related_name='my_close_friends', blank=True)
    rank = models.ManyToManyField(Rank, related_name='rank', default='Newbie', blank=True)

    avatar = models.ImageField(("Avatar"), upload_to='displays', default = '1.jpg',height_field=None, width_field=None, max_length=None,blank = True)
    create_date = models.DateField(auto_now_add=True,null=True)
        
    @property
    def email_address(self):
        return self.user.email

   
    objects = ProfileManager()

    def __str__(self):
        return f'{self.user.username}'

    def get_absolute_url(self):
        return reverse("profiles:final_detail", kwargs={"username": self.user.username})
  

Если требуется больше кода, чем сообщите мне в сеансе комментариев. Я обновлю свой вопрос с этой информацией.

Комментарии:

1. Можете ли вы поделиться своей структурой модели?

2. Проверьте мой вопрос, я только что обновил свой вопрос и добавил модель

3. Итак, вы хотите просмотреть список подписчиков пользователя и каждого из подписчиков подписчика в шаблоне? это все?

4. Да, как я показываю на картинке

5. подписчики и подписчики каждого подписчика также

Ответ №1:

Хорошо, все это должно быть достижимо из шаблона:

template.html:

 <!-- users followers -->
{% for follower1 in user.is_following.all %}
  <img src="{{ follower1.avatar.url }}"/>

  <!-- followers followers -->
  {% for follower2 in follower1.is_following.all %}
    <img src="{{ follower2.avatar.url }}"/>
    ...

  {% endfor %}
{% endfor %}
  

Комментарии:

1. follower.my_followers.all ничего не возвращает в шаблоне.

2. Ну, я просто повторял ваш код — но, похоже, вы назвали это поле просто follower , так follower.follower.all что должно сработать — см. Мои правки.

3. Ничего не отображается вообще — или просто второй цикл не работает?

4. Просто ничего не печатает

5. У меня там был тип — я исправил его сейчас — хотите проверить еще раз?