通常,Django 模式是您将在views.py 文件中的视图中编写查询。在这里,您将获取给定 URL 的每个预定义查询,并返回呈现模板的响应(大概您的前端团队将与您一起构建。)或返回 JSON 响应(例如,通过 Django Rest Framework 进行 SPA 前端-结尾)。
tutorial is strong on this,因此对于放置东西的位置可能比文档本身更好。
查询可以在任何地方运行,但 django 被构建为通过 URL 模式接收请求,并返回响应。这通常在 views.py 中完成,每个视图通常由 urls.py 文件中的一行调用。
如果您对遵循胖模型方法并将它们放在那里特别感兴趣,那么您可能会对Manager 对象感兴趣,它们是您通过的what define querysets,例如MyModel.objects.all()
我的示例视图(对于基于类的视图,它提供有关匹配列表的信息:
class MatchList(generics.ListCreateAPIView):
"""
Retrieve, update or delete a Match.
"""
queryset = Match.objects.all()
serializer_class = MatchSerialiser
不过,那个查询集可以是任何东西。
具有不同查询集的基于函数的视图将是:
def event(request, event_slug):
from .models import Event, Comment, Profile
event = Event.objects.get(event_url=event_slug)
future_events = Event.objects.filter(date__gt=event.date)
comments = Comment.objects.select_related('user').filter(event=event)
final_comments = []
return render(request, 'core/event.html', {"event": event, "future_events": future_events})
edit:第二个例子已经很老了,最好将查询重构为:
future_events=Event.objects.filter(date__gt=event.date).select_related('comments')
编辑编辑:值得指出的是,QuerySet 不是一种语言,就您使用它的方式而言。它是位于数据库顶部的对象关系映射器的 django API,与 SQLAlchemy 的方式相同 - 事实上,您可以换出或使用 SQLAlchemy 而不是使用 Django ORM if you really wanted。大多数情况下,您会听到人们谈论 Django ORM。 :)