Queryset上的Django forloop返回相同的用户

时间:2019-01-21 18:03:08

标签: python django django-queryset

我已经在Django中创建了一个查询集以按位置进行过滤。

1)如果未键入位置,则页面应显示所有用户。

2)如果输入的位置与另一个用户匹配,则仅应显示该用户。

我正在queryset上运行一个forloop,以使用与过滤器匹配的用户填充页面。

此刻,该页面返回了相同的用户两次,但未显示任何其他用户。

这是一张图片。 problem

任何人都能诊断出问题所在吗?

我省略了不相关的代码。

filters.py

import django_filters
from .models import Profile

class ProfileFilter(django_filters.FilterSet):
    class Meta:
        model = Profile
        fields = {
            'city': ['iexact'],
        }

views.py

@login_required
def profile_filter(request):
    f = ProfileFilter(request.GET, queryset=Profile.objects.all())
    return render(request, 'profile/profile_filter.html', {'filter': f})

filter.html

{% for profile in filter.qs %}
                  <img class="img-thumbnail account-img center" src="{{ MEDIA_URL }}{{ user.profile.image.url }}" width="100" class="img-fluid mx-auto d-block" alt="Card image cap">
                      <div class="card-body padding-success">
                            <h3 class="marker">{{ user.first_name }} {{ user.last_name }}</h3>
                            <h3 class="marker">City: {{ user.profile.city }}</h3>
                            <br><button type="submit" class="small" value="submit" href="{% url 'register' %}">Message?</button>
                      </div>
                </div>
          {% endfor %}

1 个答案:

答案 0 :(得分:0)

您根本不会在for循环中引用过滤器中的配置文件;您使用user,它会自动填充当前登录用户的值。您应该使用在for循环中定义的变量profile

{% for profile in filter.qs %}
      <img class="img-thumbnail account-img center" src="{{ MEDIA_URL }}{{ profile.image.url }}" width="100" class="img-fluid mx-auto d-block" alt="Card image cap">
          <div class="card-body padding-success">
                <h3 class="marker">{{ profile.user.first_name }} {{ user.last_name }}</h3>
                <h3 class="marker">City: {{ profile.city }}</h3>
                <br><button type="submit" class="small" value="submit" href="{% url 'register' %}">Message?</button>
          </div>
    </div>
{% endfor %}