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 直到screening_instance.get_omitted_10。有没有更好的方法可以在不产生get_omitted_1的情况下做到这一点,get_omitted_2..每种情况的方法,例如 get_omitted_%d ??
我尝试在运行时创建动态函数,但遇到了一些问题。我尝试了这样的事情:
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)
看不出任何可能的需求。如果您需要动态访问项目,请使用一种方法:这就是它们的用途。
def get_omitted(self, number):
return OmittedInformationReason.objects.get(pk=number)
通过创建这样的方法,我将无法在 django 视图中使用它 对于 screening.get_omitted.1 所以,动态方法使我能够在 查看为screening.get_omitted_1
啊哈!你应该在你最初的问题中提到这一点。如果您有其他人会引导您到创建自定义标签的文档,这是解决问题的正确方法。
创建代码后,您可以在模板中执行{% get_omitted 1 %}
,然后执行{% get_omitted 2 %}
等操作。