Django:通过RelatedManager访问模型的方法

时间:2012-01-27 16:35:53

标签: django django-models

我有以下设置:     class Baguette(models.Model):         #fields

class Pizza(models.Model):
    # fields

class Topping(models.Model):
    # fields

    @classmethod
    def do_something(cls):
        # stuff

    class Meta:
        abstract = True

class PizzaTopping(models.Model):
    obj = models.ForeignKey(Pizza, related_name='topping_set')

class BaguetteTopping(models.Model):
    obj = models.ForeignKey(Baguette, related_name='topping_set')

我知道,关系的形成方式并不完美,但现在就是这样。

我的问题是:我是否可以通过RelatedManager以动态方式访问do_something,而不知道其背后是否有PizzaToppingBaguetteTopping

我有objPizza的实例Baguette(此时我不知道它是Pizza还是Baguette)。现在我想打电话给这样的话:

obj.topping_set.__modelclass__.do_something()

有没有办法在不测试obj类的情况下执行此操作?

1 个答案:

答案 0 :(得分:2)

obj.topping_set.model将是您的模型类。所以obj.topping_set.model.do_something()