如何解决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 举报,一经查实,本站将立刻删除。