Django视图模板过滤数据库

时间:2018-03-20 12:53:28

标签: python sql django templates filter

什么是筛选上下文的最佳方法。我想在我的索引页面上查看来自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'

1 个答案:

答案 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:希望我得到单数/复数形式,对不起,但我害怕我不会说你的语言;)