編集:元の質問が私の質問を明確に説明していなかったので、私は質問を完全に書き直しました
特定のモデルインスタンスごとに固有の関数を実行したいと思います。
理想的には、次のようなものが必要です。
class MyModel(models.Model):
data = models.CharField(max_length=100)
perform_unique_action = models.FunctionField() #stores a function specific to this instance
x = MyModel(data='originalx', perform_unique_action=func_for_x)
x.perform_unique_action() #will do whatever is specified for instance x
y = MyModel(data='originaly', perform_unique_action=func_for_y)
y.perform_unique_action() #will do whatever is specified for instance y
ただし、データ型FunctionFieldはありません。通常、これは継承によって解決可能であり、MyModelのサブクラスを次のように作成します。
class MyModel(models.Model):
data = models.CharField(max_length=100)
perform_unique_action = default_function
class MyModelX(MyModel):
perform_unique_action = function_X
class MyModelY(MyModel):
perform_unique_action = function_Y
x = MyModelX(data='originalx')
x.perform_unique_action() #will do whatever is specified for instance x
y = MyModelY(data='originaly')
y.perform_unique_action() #will do whatever is specified for instance y
残念ながら、次の方法で関数にアクセスしようとしているため、継承を使用できないと思います。
class MyModel(models.Model):
data = models.CharField(max_length=100)
perform_unique_action = default_function
class SecondModel(models.Model):
other_data = models.IntegerField()
mymodel = models.ForeignKey(MyModel)
secondmodel = SecondModel.objects.get(other_data=3)
secondmodel.mymodel.perform_unique_action()
問題は、サブクラスのperform_unique_actionをオーバーライドした場合に、SecondModelで外部キーがどのタイプになるかわからないことのようです。
SecondModelから外部キーとしてMyModelにアクセスしても、MyModelのインスタンスごとに一意の関数を使用できますか?