获取djang中一个id对应的所有图像

2024-05-19 00:40:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有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 %}

Tags: imagedivformidgetreturntitlerequest
1条回答
网友
1楼 · 发布于 2024-05-19 00:40:25

代替第二个查询集,您可以对Post\u图像使用反向关系,在您的示例中,它是模板中的postpost.post.all,如下所示:

{% 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)

相关问题 更多 >

    热门问题