什么是筛选上下文的最佳方法。我想在我的索引页面上查看来自Roslina的最后三个对象并且与它们相关的所有图像具有相同的nazwa_polska(foreign_key)
my model.py
**class Roslina(models.Model):
id_rosliny = models.AutoField(primary_key=True)
nazwa_polska = models.CharField(max_length=256)
nazwa_lacinska = models.CharField(max_length=256)
opis = models.TextField()
data = models.DateField()
def __str__(self):
return self.nazwa_polska
class Images(models.Model):
nazwa_polska = models.ForeignKey(Roslina, related_name='image', on_delete=models.CASCADE)
image = models.ImageField(max_length=255, upload_to=generate_filename);
def __str__(self):
return self.nazwa_polska.nazwa_polska**
views.py
from django.shortcuts import render
from django.views.generic import ListView,TemplateView
from . import models
# Create your views here.
class IndexView(TemplateView):
template_name='index.html'
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['zdjecia'] = models.Images.objects.all()
context['rosliny'] = models.Roslina.objects.all()
return context
class WyborAtlasu(TemplateView):
template_name='basic_app/wyborAtlasu.html'
答案 0 :(得分:0)
我想在我的索引页面上查看来自Roslina的最后三个对象
"最后"根据哪个标准?但无论如何,解决方案是在期望的字段上sort your queryset - 使用后代排序来获得" last"首先记录(反向排序) - 然后slice it以获得前三个记录。这在视图中更好。
where clause
与他们相关的所有具有相同nazwa_polska(foreign_key)的图像
根据您的模型定义,您可以通过它获得def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
last_rosliny = models.Roslina.objects.order_by("-date")[:3]
context['rosliny'] = last_rosliny
# you don't need this one, cf below
# context['zdjecia'] = models.Images.objects.all()
return context
相关图像"图像"相关的描述符(在你的情况下,它被命名为"图像"因为你明确地命名它:Roslina
- models.ForeignKey(Roslina, related_name='image'...)
本来是一个更好的名字,但无论如何),即:
images
现在,由于Django模板语言允许进行属性查找和方法调用(对于不至少采用任何参数的方法),您不需要将图像添加到视图的上下文中,可以直接在模板中从r = Roslina.objects.get(id_rosliny=<id_of_a_rosliny_here>)
for image in r.image.all():
print(image.pk, image.image)
访问它们:
Roslina
PS:希望我得到单数/复数形式,对不起,但我害怕我不会说你的语言;)