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_omit_1 、screening_instance.get_omit_2 から screening_instance.get_omit_10 までアクセスしたい。get_omit_1、get_omit_2.. get_omit_%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)
4

2 に答える 2

1

これが必要になる可能性はありません。項目への動的アクセスが必要な場合は、メソッドを使用してください。それが目的です。

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

このようなメソッドを作成すると、screening.get_omit.1 の django ビューで使用できなくなります。したがって、動的メソッドを使用すると、screening.get_omit_1 としてビューで使用できます。

あはは!元の質問でこれについて言及する必要がありました。他のユーザーが、問題を解決する正しい方法であるカスタム タグを作成するためのドキュメントに誘導したとします。

タグを作成したら、テンプレートで次のことができ{% get_omitted 1 %}ます{% get_omitted 2 %}

于 2012-04-30T17:41:00.987 に答える