视图中的Django外键 - 获取列表中每个用户显示的第一个图像
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视图中的Django外键 - 获取列表中每个用户显示的第一个图像相关的知识,希望对你有一定的参考价值。
我正在尝试让我的仪表板显示您所在区域的用户列表。这到目前为止工作,但我不能得到用户的第一个图像显示。我得到的当前错误消息是“'QuerySet'对象没有属性'id'”
models.朋友
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)
views.朋友
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)
user = User.objects.filter(pk=pk)
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.objects.filter(user_id=user.id)
}
return render(request, self.template_name, args)
dashboard.html
<h2>People near you</h2>
{% for user in users %}
<a href="{% url 've:view_profile_with_pk' pk=user.pk %}">
<h4>{{ user.username }}</h4>
<p>{{ user.images }}</p>
{% if images %}
{% for img in images %}
<a href="{{ img.image.url }}" target="_blank">
<img src="{{ img.image.url }}" class="" style="max-width: 300px">
</a>
{% endfor %}
{% else %}
<p>No images</p>
{% endif %}
</a>
{% 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 %}
答案
qazxsw poi返回查询集。当你稍后尝试qazxsw poi时会引发错误。您需要使用user = User.objects.filter(pk=pk)
方法在queryset中获取第一个对象:
Images.objects.filter(user_id=user.id)
或者使用first()
代替:
user = User.objects.filter(pk=pk).first()
但如果提供id的用户不存在,则第二个选项会引发get
错误。要处理此错误,您可以使用user = User.objects.get(pk=pk)
,在ID错误的情况下返回页面:
DoesNotExist
以上是关于视图中的Django外键 - 获取列表中每个用户显示的第一个图像的主要内容,如果未能解决你的问题,请参考以下文章