django从view.py类中的模型获取垂直帖子

问题描述

如何从views.py中的Postimage,PostVideo,PostAudio ....类中获取与特定帖子相关的照片,视频和其他对象,即PostDetailView(DetailView)类?

正在将models.py中的所有照片,Postimage视频,PostVideo ....模型返回到显示模板。

这是models.py和views.py

在views.py或models.py中进行哪些更改,以使其仅返回特定图像,即来自models.py中的Postimage,PostVideo,PostAudio .....类的视频

models.py

from django.urls import reverse
from django.template.defaultfilters import slugify
from django.contrib.auth.models import User
from django.contrib.contenttypes.fields import GenericRelation

from django_resized import ResizedImageField

from django.shortcuts import render
from django.http import HttpResponseRedirect

from comment.models import Comment


class Post(models.Model):
    author = models.ForeignKey(User,on_delete=models.CASCADE,default=None)
    email =  models.EmailField(max_length=254,blank=False)
    date = models.DateTimeField(auto_Now_add=True)
    editdate = models.DateTimeField(auto_Now=True)
    slug = models.SlugField(unique=True)
    
    
    
    title = models.CharField(max_length=150)
    body = models.TextField()
    
    image = ResizedImageField(size=[480,360],upload_to='blog/images',blank=True)
    audio = models.FileField(blank=True)
    video = models.FileField(blank=True)
    file = models.FileField(blank=True)
    YoutubeUrl = models.CharField(blank=True,max_length=200)
    ExternalUrl = models.CharField(blank=True,max_length=200)

    
    
 
    # comment app
    comments = GenericRelation(Comment)

    class Meta:
        ordering = ['-editdate','-date']

    def get_absolute_url(self):
        return reverse('post:postdetail',kwargs={'slug': self.slug})

    def __str__(self):
        return f"By {self.author}: {self.title[:25]}"

    def save(self,*args,**kwargs):
        if not self.id:
            # Newly created object,so set slug
            _title = self.title
            if len(_title) > 45:
                _title = _title[:45]
            unique_slug = self.slug = slugify(_title)
            count = 1
            while self.__class__.objects.filter(slug=unique_slug).exists():
                unique_slug = "{0}-{1}".format(self.slug,count)
                count += 1
            self.slug = unique_slug
        super().save(*args,**kwargs)
        
class Postimage(models.Model):
    post = models.ForeignKey(Post,default=None,on_delete=models.CASCADE)
    image = ResizedImageField(size=[480,blank=True,default=None)

    def __str__(self):
        return self.post.title


class PostcopyrightYoutube(models.Model):
    post = models.ForeignKey(Post,blank=True)
    link = models.CharField(max_length=200,blank = True,default = None)


    def __str__(self):
        return self.post.title


class PostVideo(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    video = models.FileField(upload_to='blog/videos')

    def __str__(self):
        return self.post.title

class PostAudio(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    audio =models.FileField(upload_to='blog/audios')

    def __str__(self):
        return self.post.title

class PostFile(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    file = models.FileField(upload_to='blog/files')

    def __str__(self):
        return self.post.title

class PostYoutubeUrl(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    YoutubeUrl = models.CharField(max_length=100)

    def __str__(self):
        return self.post.title

class PostExternalUrl(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    ExternalUrl = models.CharField(max_length=200)

    def __str__(self):
        return self.post.title

views.py

from django.views.generic import ListView,DetailView,UpdateView,TemplateView
from django.contrib.auth.decorators import login_required

from .models import Post,Postimage,PostVideo,PostAudio,PostFile,PostYoutubeUrl,PostExternalUrl,PostcopyrightYoutube
from .forms import NewBlogForm1,NewBlogForm2,NewBlogForm3,NewBlogForm4,NewBlogForm5,NewBlogForm6
from django.forms import modelformset_factory
from .forms import PostForm
from django.shortcuts import render,get_object_or_404,HttpResponseRedirect


class PostListView(ListView):

    model = Post
    template_name = 'post/postlist.html'


class PostDetailView(DetailView):
    model = Post
    template_name = 'post/postdetail.html'

    def get_context_data(self,**kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        # Add in a QuerySet of all the books
        context['photos'] = Postimage.objects.all()
        context['videos'] = PostVideo.objects.all()
        context['audios'] = PostAudio.objects.all()
        context['files'] = PostFile.objects.all()
        context['YoutubeUrls'] = PostYoutubeUrl.objects.all()
        context['ExternalUrls'] = PostExternalUrl.objects.all()
        context['copyrightYoutube'] = PostcopyrightYoutube.objects.all()
        
        return context
        
        

@login_required(login_url='profile:login')

def thankYou(request):
    return render(request,'post/thankYou.html')
    
    
def createpost_view(request):
    ImageFormSet = modelformset_factory(Postimage,form=NewBlogForm1,extra=8)
    VideoFormSet = modelformset_factory(PostVideo,form=NewBlogForm2,extra=8)
    AudioFormSet = modelformset_factory(PostAudio,form=NewBlogForm3,extra=8)
    FileFormSet = modelformset_factory(PostFile,form=NewBlogForm4,extra=8)
    YoutubeUrlFormSet = modelformset_factory(PostYoutubeUrl,form=NewBlogForm5,extra=8)
    ExternalUrlFormSet = modelformset_factory(PostExternalUrl,form=NewBlogForm6,extra=8)
    
    if request.method == 'POST':
        form = PostForm(request.POST,request.FILES)
        formset = ImageFormSet(request.POST,request.FILES,queryset=Postimage.objects.none())
        formset1 = VideoFormSet(request.POST,queryset=PostVideo.objects.none())
        formset2 = AudioFormSet(request.POST,queryset=PostAudio.objects.none())
        formset3 = FileFormSet(request.POST,queryset=PostFile.objects.none())
        formset4 = YoutubeUrlFormSet(request.POST,queryset=PostYoutubeUrl.objects.none())
        formset5 = ExternalUrlFormSet(request.POST,queryset=PostExternalUrl.objects.none())

        if form.is_valid():
            post_form = form.save(commit=False)
            post_form.author = request.user  # save the user who created the post
            post_form.save()
            try:
                for formm in formset4.cleaned_data:
                    YoutubeUrl = formm['YoutubeUrl']
                    urll1 = PostYoutubeUrl(post=post_form,YoutubeUrl=YoutubeUrl)
                    urll1.save()

            except:
                pass

            try:
                for formm in formset5.cleaned_data:
                    ExternalUrl = formm['ExternalUrl']
                    url22 = PostExternalUrl(post=post_form,ExternalUrl=ExternalUrl)
                    url22.save()
            except:
                pass

            try:
                for formm in formset.cleaned_data:
                    image = formm['image']
                    photo = Postimage(post=post_form,image=image)
                    photo.save()
            except:
                pass




            try:
                for formm in formset1.cleaned_data:
                    video = formm['video']
                    video1 = PostVideo(post=post_form,video=video)
                    video1.save()
            except:
                pass



            try:
                for formm in formset2.cleaned_data:
                    audio = formm['audio']
                    audio1 = PostAudio(post=post_form,audio=audio)
                    audio1.save()
            except:
                pass

            try:
                for formm in formset3.cleaned_data:
                    file = formm['file']
                    file1 = PostFile(post=post_form,file=file)
                    file1.save()
            except:
                pass
            return HttpResponseRedirect('/post/thankYou/')
    else:
        form = PostForm
        formset = ImageFormSet(queryset=Postimage.objects.none())
        formset1 = VideoFormSet(queryset=PostVideo.objects.none())
        formset2 = AudioFormSet(queryset=PostAudio.objects.none())
        formset3 = FileFormSet(queryset=PostFile.objects.none())
        formset4 = YoutubeUrlFormSet(queryset=PostYoutubeUrl.objects.none())
        formset5 = ExternalUrlFormSet(queryset=PostExternalUrl.objects.none())

    return render(request,'post/createpost.html',{'form': form,'formset': formset,'formset1': formset1,'formset2': formset2,'formset3': formset3,'formset4': formset4,'formset5': formset5})

提前谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...