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)

I want to have access to screening_instance.get_omitted_1 ,screening_instance.get_omitted_2 upto screening_instance.get_omitted_10. Is there better way to do this without creating get_omitted_1, get_omitted_2.. methods for each case like get_omitted_%d ??

I tried creating dynamic function at runtime but had some problem with it. I tried something like this:

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

2 回答 2

1

我看不出有任何可能的需要。如果您需要动态访问项目,请使用一种方法:这就是它们的用途。

def get_omitted(self, number):
    return OmittedInformationReason.objects.get(pk=number)
于 2012-04-30T08:21:46.237 回答
0

通过创建这样的方法,我将无法在 django 视图中将其用于screening.get_omitted.1 因此,动态方法使我能够在视图中使用screening.get_omitted_1

啊哈!您应该在原始问题中提到这一点。如果您有其他人会指导您创建自定义标签的文档,这是解决您的问题的正确方法。

一旦你创建了你的标签,你就可以在你的模板中做{% get_omitted 1 %},然后{% get_omitted 2 %}等等。

于 2012-04-30T17:41:00.987 回答