2012-04-30 56 views
0
class Screening(models.Model): 
    def get_omitted_1(self): 
     return OmittedInformationReason.objects.get(pk=self.omitted_1).name 
    get_omitted_1 = property(get_omitted_1) 

我想有權訪問screening_instance.get_omitted_1,screening_instance.get_omitted_2 upto screening_instance.get_omitted_10。有沒有更好的方法來做到這一點,而不是創建get_omitted_1,get_omitted_2 ..方法爲每個案例get_omitted_%d?Python中的動態運行時方法

我試着在運行時創建動態函數,但它有一些問題。我試過這樣的事情:

def omitted_list(self,x): 
    def omitted_function(self): 
     opk = "omitted_%d" % x 
     return OmittedInformationReason.objects.get(pk=self.opk).name 

    omitted_name = 'get_omitted_'+ str(x) 

    setattr(self.__class__, omitted_name , omitted_function) 
    omitted_name = property(omitted_name) 

    for x in range(1, 3): 
     omitted_list(x) 
+0

我不確定你爲什麼相信代碼可以工作... –

+0

或者你爲什麼認爲這將是一個好主意。 –

+0

我得到AttributeError:'篩選'對象沒有屬性'get_omitted_1'與此代碼 – Abhaya

回答

1

我看不到任何可能的需要。如果您需要對項目進行動態訪問,請使用一種方法:這就是他們的用途。

def get_omitted(self, number): 
    return OmittedInformationReason.objects.get(pk=number) 
+0

通過創建像這樣的方法,我將無法在django視圖中使用它for screening.get_omitted.1因此,動態方法使我可以使用作爲screening.get_omitted_1查看 – Abhaya

0

By creating method like this, I wont be able to use it in django view for screening.get_omitted.1 So, dynamic method enables me to use in view as screening.get_omitted_1

啊哈!你應該在你原來的問題中提到過這個。如果你有其他人會引導你到documentation for creating custom tags這是解決你的問題的正確方法。

一旦你創建了你的標籤,在你的模板中你可以做{% get_omitted 1 %}然後{% get_omitted 2 %}等等。