Django外键类没有显示

时间:2018-03-07 11:18:10

标签: python django foreign-keys

目标是让仪表板显示您所在区域的用户列表。用户列表有效,它显示用户名。唯一的问题是我无法显示用户图像(理想情况下只有第一张图像)。目前没有错误消息。什么都没有出现。

models.py

class Images(models.Model):
    image = models.ImageField(upload_to='profile_image', null=True, default='profile_image/none/no-img.png')
    user = models.ForeignKey(User, on_delete=models.CASCADE,  null=False)

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(max_length=500, blank=True, null=True)
    birth_date = models.DateField(null=True, blank=True)
    ...

views.py

class DashboardView(TemplateView):
    template_name = 've/cp/dashboard.html'

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(DashboardView, self).dispatch(*args, **kwargs)

    def get(self, request, pk=None):
        users = User.objects.exclude(id=request.user.id)

        try:
            favorite = Favorite.objects.get(current_user=request.user)
            favorites = favorite.users.all()
        except Favorite.DoesNotExist:
            favorites = None

        args = {
            # 'users': users, 'favorites':favorites, 'images': images,
        }

        return render(request, self.template_name, args)

dashboard.html

        <div class="col-12">
            <h2>People near you</h2>
            {% for user in users %}
                <a href="{% url 've:view_profile_with_pk' pk=user.pk %}">

                    <!--THIS WORKS-->
                    <h4>{{ user.username }}</h4>
                    <p>{{ user.profile.bio }}</p>

                    <!--But not this... why..-->
                    <p>{{ user.images.image.url }}</p>

                ''' 
                Or this.. However it does work on view_profile page where 
                there is a pk. Seem like it's not finding images for users, 
                as this results in a "No images message on localhost 
                '''
                {% if images %}
                    {% for img in images %}
                    <a href="{{ user.img.image.url }}" target="_blank">
                    <img src="{{ user.img.image.url }}" class="" style="max-width: 300px">
                    </a>
                    {% endfor %}
                {% else %}
                <p>No images</p>
                {% endif %}
                </a>

                <!-- Favorites works great -->
                {% if not user in favorites %}
                <a href="{% url 've:change_favorites' operation='add' pk=user.pk %}">
                <button type="button" class="btn btn-success">Add Favorite</button>
                </a>
                {% endif %}
            {% endfor %}
        </div>

1 个答案:

答案 0 :(得分:1)

您可以使用images_set属性从用户对象直接获取用户的图像。

在您的情况下,您可以执行以下操作:

{% for user in users %}
    {% with first_image=user.images_set.first %} 
        {% if first_image %} 
            <a href="{{ first_image.image.url }}" target="_blank">
            <img src="{{ first_image.image.url }}" class="" style="max-width: 300px">
        {% endif %}
    {% endwith %} 
{% endfor %}