Python 在django中获取与一个id对应的所有图像
我有一个带有post数据的表和一个带有post_图像并通过post_id连接的表。 现在我需要一个查询集,它将帮助我从表2中获取关于post id的所有图像。我使用的是Python 在django中获取与一个id对应的所有图像,python,django,Python,Django,我有一个带有post数据的表和一个带有post_图像并通过post_id连接的表。 现在我需要一个查询集,它将帮助我从表2中获取关于post id的所有图像。我使用的是post\u image=post\u image.objects.filter(post=post),但它提供了空查询集和post\u image=post\u image.objects.filter(post=post.id)正在给我“QuerySet”对象没有属性“id”错误 这是我的完整views.py和view.htm
post\u image=post\u image.objects.filter(post=post)
,但它提供了空查询集和post\u image=post\u image.objects.filter(post=post.id)
正在给我“QuerySet”对象没有属性“id”
错误
这是我的完整views.py和view.html
Views.py:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render, redirect
from models import Post,Post_image
from django.contrib.auth import (
authenticate,
login,
logout,
get_user_model,
)
from django.shortcuts import render,redirect
from django.db.models import Q
from django.http import HttpResponseRedirect,HttpResponse
from django.contrib.auth.models import User
from .forms import UserLoginForm,UserRegisterForm
from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
from django.contrib import messages
# Create your views here.
def Upload(request):
if request.method=="POST":
dog = Post_image(
image=request.FILES.get('image'))
dog.save()
return redirect('/index')
def index(request):
#return HttpResponseRedirect("base.html")
if request.user.is_authenticated(): #or request.session.get_expiry_age()> 10):
request.session.set_expiry(600)
query=request.GET.get('q')
if query:
return redirect('/view?q=%s' %query)
return render(request, "index.html")
else:
return redirect("/login")
def landing(request):
form=UserLoginForm(request.POST or None)
title='Sign In'
if form.is_valid():
username=form.cleaned_data.get('username')
password=form.cleaned_data.get('password')
user=authenticate(username=username, password=password)
login(request,user)
# print (request.user.is_authenticated())
return redirect("/index")
return render(request, "landing.html", {'form': form, 'title': title})
def create(request):
# dogs.save()
user = request.user
#print (user)
if request.method=="POST":
post = Post(title=request.POST['title'],
description=request.POST['description'],
created_by_user=user,)
post.save()
image=request.FILES.getlist('image')
print image
import pdb;pdb.set_trace()
for x in image:
post_image = Post_image(
image=x,
post=post
)
post_image.save()
import pdb;pdb.set_trace()
return redirect("/")
def error(request):
return render(request, '404.html')
def view(request):
if request.user.is_authenticated(): #or request.session.get_expiry_age()> 10):
request.session.set_expiry(600)
user = request.user
#dogs=Post.objects.all() #For seeing all entries
post= Post.objects.filter(created_by_user = user).order_by('-created_at')#[:4] #For seeing user specific entries
context={'post': post}
return render(request, 'view.html', context)
else:
messages.info(request, 'Session Expired')
return redirect("/login")
def final(request, id):
dog=Post.objects.get(id=id)
context={"dog": dog}
return render(request, 'final.html', context)
def edit(request, id):
if request.user.is_authenticated(): #or request.session.get_expiry_age()> 10):
request.session.set_expiry(600)
query=request.GET.get('q')
if query:
return redirect('/view?q=%s' %query)
dog=Post.objects.get(id=id)
context={"dog": dog}
return render(request, 'edit.html', context)
else:
messages.info(request, 'Session Expired')
return redirect("/login")
def update(request, id):
dog=Post.objects.get(id=id)
dog.title=request.POST['title']
dog.description=request.POST['description']
if dog.image == None:
dog.image=request.FILES.get('image')
elif dog.image != None:
if request.FILES.get('image') != None:
dog.image=request.FILES.get('image')
else:
dog.image== dog.image
#dog.image=request.FILES.get('image')
dog.save()
return redirect('/view')
def delete(request, id):
dog=Post_image.objects.get(id=id)
dog.delete()
return redirect('/view')
def delete_image(request, id):
Post.objects.get(id=id).image.delete(save=True)
return HttpResponseRedirect(('/view'))
def login_view(request):
#print (request.user.is_authenticated())
title="Sign in"
form=UserLoginForm(request.POST or None)
if form.is_valid():
username=form.cleaned_data.get('username')
password=form.cleaned_data.get('password')
user=authenticate(username=username, password=password)
login(request,user)
# print (request.user.is_authenticated())
return redirect("/index")
return render(request, "form.html", {"form": form, "title" : title})
def register_view(request):
title="Register"
form=UserRegisterForm(request.POST or None)
if form.is_valid():
user=form.save(commit=False)
password=form.cleaned_data.get("password")
user.set_password(password)
user.save()
new_user = authenticate(username=user.username, password=password)
login(request, new_user)
return redirect("/login")
context = {
"form": form,
'title': title
}
return render(request, "form.html", context)
def logout_view(request):
logout(request)
return redirect("/login")
View.html:
{% extends 'base.html' %}
{% block main_content %}
<div class="content-wrapper">
<div class="container-fluid">
{% if post %}
{% for post in post %}
</div>
<div class="strip">
<div class="row">
<div class='col-md-8'>
<h6><a href="/final/{{ post.id }}" class="nav-link js-create-book" data-toggle="modal" data-target="#exampleModal">{{ post.title|title }}</a></h6>
</div>
<div class='col-md-4'>
<a href="/delete/{{ post.id }}" class='demo'><i class="fa fa-close pull-right"></i></a>
<a href="/edit/{{ post.id }}" class='' ><i class="fa fa-pencil pull-right"></i></a>
</div>
</div>
<div class='row'>
<div class="col-md-10">
<div class="descrip">
<p><small>{{ post.description|truncatechars:250 }}</small>
</p>
</div><!-- descrip ends-->
<p><small><strong>{{ post.created_at }}</strong></small></p>
<!-- <p><small><strong>{{ dog.updated_at }}</strong></small></p> -->
</div><!-- col-md-9 ends-->
<div class="col-md-2 center">
{% for p in post %}
{% for image in p.post.all %}
{{ image.image.url }}
{% endfor %}
{% endfor %}
</div>
<div class='img-modal'>
<a class='image' href='#'>
<div class='title'>
<i class='fa fa-close'></i>
</div></a>
<img src='' class="img img-responsive change"/>
<a href="/delete-image/{{ post.id }}" class='demo'>Delete</a><br/>
</div>
</div><!-- strip ends-->
{% endfor %}
{% else %}
<h3 class='error'>No Entry yet!!Please add entry.</h3>
{% endif %}
</div>
{% endblock %}
{%extends'base.html%}
{%block main_content%}
{%if post%}
{post%中的post为%1}
{{post.description}truncatechars:250}
{{post.created_at}}
{post%%中的p的%s}
{%用于p.post.all%中的图像}
{{image.image.url}
{%endfor%}
{%endfor%}
{%endfor%}
{%else%}
还没有人进来!!请添加条目。
{%endif%}
{%endblock%}
您可以对Post\u图像使用反向关系,而不是第二个查询集,在您的情况下,Post\u图像是Post
,Post.Post。模板中的所有
,如下所示:
{% for post in posts %}
{{ post.id }}
{% for image in post.post.all %}
{{ image.image.url }}
{% endfor %}
----------------
{% endfor %}
因此,您不必将post_图像传递给上下文,只需离开:
post= Post.objects.filter(created_by_user = user).order_by('-created_at')
context={'posts': post }
return render(request, 'view.html', context)
我做了必要的更改,但得到了错误
TypeError at/view/'Post'对象不可编辑@SarthakTuteja您是否可以这样查看Post:Post=Post.objects.filter(由用户创建)。order\u by('-created_at')
?以后可能重写了post
变量?看起来像是post
包含单个对象而不是queryset。我编辑了我的问题以向您展示我的完整views.py和view.html,我正在重写post变量(我猜),但我找不到确切的位置。@SarthakTuteja在视图中尝试更改上下文={'posts':post}
和模板中的{%for post in%}
谢谢,放弃了第一个for循环不知怎么对我起了作用。你能给我一些解释和/或一些文档,以便我能理解这个概念并在将来使用它吗??