2015-05-17 35 views
0
class Model1(models.Model): 

    def method1(self): 
     try: 
      x = self.someotherclass_set.get(....) 
     except self.DoesNotExist: 
      return None 

     return x 

然后过滤:尝试...除了...返回一个异常,如果记录没有找到

@register.filter 
def filter1(arg1): 
    x = var1. method1() 
    if x: 
     return x.value 
    else: 
     return 'Nothing' 

和一个视图:

some data: {{ item|filter1 }} 

然而在黄色屏幕和错误DoesNotExist正在抛出。我怎样才能摆脱它?如果没有记录,我只想显示“Nothing”。

回答

1

使用first()方法,而不是try/except块:

def method1(self): 
    return self.someotherclass_set.filter(....).first() 

顺便说一句,你还可以简化模板过滤器:

@register.filter 
def filter1(arg1): 
    x = arg1.method1() 
    return x.value if x else 'Nothing' 

UPDATE:如果你真的想用例外,则将异常更改为有效:

except Model1.DoesNotExist: 
+0

出于某种原因,它在Django 1.8中不适用于我,并不是它看起来可行。 –

+0

它完美的工作在1.8。请显示真实的代码。 – catavaran

+0

我不需要'返回arg1.method1()'我需要'返回arg1.method1().value'并且不起作用---->'返回arg1.method1().value或'Nothing'' –

相关问题