2010-01-14 5 views
0

je la vue suivante qui prend la valeur de « q » à partir d'un modèle:Modèle Méthode avec une variable

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}) 

Est-il possible de passer la valeur de q de la vue d'une méthode de modèle, comme "serveur = 'q'" ci-dessous. J'ai essayé ceci mais échoue. Avant de conclure que cela ne peut pas être fait, quelqu'un pourra-t-il me le dire avec certitude?

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

MemoryManager est-il défini en tant que gestionnaire principal dans votre modèle de serveur (par exemple, "objects = MemoryManager")? Vous devez modifier get_query_set pour accepter les paramètres, soit un paramètre (q) ou un ensemble d'arguments. Pourquoi ne pas faire une méthode distincte sur le gestionnaire pour ces appels? – Tom

+0

Non, c'est la deuxième: # 1 objects = models.Manager() # 2 memsinserver = MemoryManager() –

Répondre

0

Ce que vous essayez de faire ici n'est pas du tout clair. Dans la fonction, vous filtrez sur la valeur de la variable GET q. Mais dans le Gestionnaire, vous filtrez sur la chaîne "q".

Voulez-vous simplement transmettre la valeur q au Manager? Dans ce cas, la meilleure façon serait de définir une méthode distincte Manager:

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

Maintenant, vous pouvez appeler Server.memsinserver.filter_server(q). Est-ce ce que tu voulais?

+0

Oui, c'est exactement ce que je cherchais. –

Questions connexes