我有一个带有post数据的表和一个带有post\u映像并通过post\u id连接的表。
现在我需要一个查询集,它将帮助我从表2中获取关于post id的所有图像。我正在使用post_image = Post_image.objects.filter(post=post)
,但它给出了空查询集,post_image = Post_image.objects.filter(post=post.id)
给出了'QuerySet' object has no attribute 'id'
错误
这是我的完整views.py和view.html
视图.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")
查看.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 %}
代替第二个查询集,您可以对Post\u图像使用反向关系,在您的示例中,它是模板中的
post
,post.post.all
,如下所示:因此,您不必将post\图像传递给上下文,只需留下:
相关问题 更多 >
编程相关推荐