Django View /过滤器

标签 django filtering

我刚刚完成了 Django 教程,虽然很想学习更多,但我绝不精通。我想你可能会说我现在还不够了解危险。

假设我有一个音乐数据库。我有一个艺术家模型、一个专辑模型、一个流派模型和一个歌曲模型。我想做的是根据给定的过滤器显示专辑(甚至艺术家);所以我的前端会显示一个专辑列表并提供一种过滤列表的方法。例如,“Jazz”链接只会显示 Jazz 专辑。很简单。

我可以想出几个方法来完成这个,但我想从右脚开始......开始形成“最佳实践”Django 方法。我能想到的一种方法是编写 View ...这样/albums/jazz 将只显示爵士乐。另一种方法是编写过滤相册的模型级方法。然而,在这里我对如何实际实现这样的过滤器有点模糊。

有人可以大体概述如何最好地完成这项任务吗?

最佳答案

假设您知道如何在项目中构建应用程序(即本教程教授的内容),您可以使用示例 models.pyurls.pyviews.py 用于您的示例应用 myapp

示例 models.py:

class Genre(models.Model):
    name = models.CharField(unique=True) # set name to be unique
    ...

class Album(models.Model):
    genre = models.ForeignKey(Genre)
    ...

示例urls.py:

urlpatterns = patterns('',
    ...
    url(
        r'^albums/(?P<genre>[-\w]+)/$',
        ListAlbumsByGenreView.as_view(), name='list_albums_by_genre_view'
    ),
    ...
)

请注意 genre 参数是 URL 模式中的唯一参数。

示例 views.py 使用 ListView :

from django.shortcuts import get_object_or_404
from django.views.generic.list import ListView

from myapp.models import Album, Genre

class ListAlbumsByGenreView(ListView):

    model = Album

    def get_context_data(self, **kwargs):
        context = super(ListAlbumsByGenreView, self).get_context_data(**kwargs)
        # fetch the genre; if genre not found, an HTTP 404 is returned
        genre = get_object_or_404(Genre, name=kwargs['genre'])
        # filter the albums by genre
        context['albums'] = Album.objects.filter(genre=genre)
        return context

上面的 ListView 将 albums 放在您的 HTML 模板的上下文中;这包含按流派过滤的专辑列表。

上面使用的单独导入的函数都在 Django 文档中有详细的记录。

关于Django View /过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19731599/

相关文章:

angularjs - Angular.js : filter ng-repeat by absence in array

python - 如何配置 Atom 以自动完成 Django 模板

python - Django 使用错误的 python 版本运行

python - 在搜索表单中输入错误的查询 get's me keyerror with pandas 和 django

sql - 检测子串

java - 我想在 Java GUI 中的表过滤器之间创建 "or"关系而不是 "and"

django.db.utils.ProgrammingError : relation "django_content_type" does not exist

python - 在渲染之前对 django 模板节点进行后处理以组合标签

excel - 使用 VBA 将数据透视表设置为基于另一个字段的特定日期

html - 我需要一个数据库来处理我的网站内容吗?