【问题标题】:Model Method with a Variable带变量的模型方法
【发布时间】:2010-01-14 19:52:15
【问题描述】:

我有以下从模板中获取“q”值的视图:

from django.http import HttpResponse
from django.shortcuts import render_to_response
from GOTHAMWEB.GRID.models import *

def search(request):
    errors = []
    if 'q' in request.GET:
        q = request.GET['q']
        if not q:
            errors.append('Enter a search term.')
        elif len(q) > 20:
            errors.append('Please enter at most 20 characters.')
        else:
            srvr = Server.objects.filter(name__icontains=q)
        return render_to_response('search_results.html',
                {'srvr': srvr, 'query': q})

    return render_to_response('search_form.html',
        {'errors': errors})

是否可以将 q 的值从视图传递给模型方法,例如下面的“server='q'”。我已经尝试过了,但失败了。在断定它不能完成之前,请有人确定地告诉我。

class MemoryManager(models.Manager): 
    def get_query_set(self): 
        return super(MemoryManager, self).get_query_set().filter(server='q')

【问题讨论】:

  • MemoryManager 是否设置为您的服务器模型中的主要管理器(例如,“objects = MemoryManager”)?您必须修改 get_query_set 以接受参数,一个参数 (q) 或一组参数。为什么不在管理器上为这些调用创建一个单独的方法?
  • 不,是第二个:#1 objects = models.Manager() #2 memsinserver = MemoryManager()

标签: django django-models


【解决方案1】:

完全不清楚您要在这里做什么。在函数中,您正在过滤 GET 变量 q 的值。但在 Manager 中,您正在过滤 string "q"

您只是想将q 的值传递给管理器吗?如果是这样,最简单的方法是定义一个单独的 Manager 方法:

class MemoryManager(models.Manager):
    def filter_server(q):
        return self.get_query_set().filter(server=q)

现在您可以致电Server.memsinserver.filter_server(q)。这是你想要的吗?

【讨论】:

  • 是的,这正是我想要的。
猜你喜欢
  • 2017-06-09
  • 2022-01-18
  • 1970-01-01
  • 2018-02-25
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
相关资源
最近更新 更多