编辑:我完全重写了这个问题,因为原来的问题没有清楚地解释我的问题
我想运行一个特定于每个特定模型实例的函数。
理想情况下,我想要这样的东西:
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 的每个实例仍然具有唯一的功能吗?