Django - 模型类接口?

时间:2011-05-17 16:08:16

标签: django django-models

我有一些与各种Web API交互的模型。我需要确保每个模型都有一个特定的方法。使用PHP我会创建一个类接口,以确保我的模型具有完成它的工作所必需的方法,但似乎Python接口不适用于Django模型。

我假设这样做的方法是创建一个扩展model.Model的基类,它定义了我需要的方法,如果需要,我可以在每个API模型中覆盖它们。如果没有Django在同步数据库时拿起“基础”类,我怎么能做到这一点?这甚至是正确的方法吗?

2 个答案:

答案 0 :(得分:4)

您可以使用abstract = True类的Meta方面。

class BaseModelInterface(models.Model):
    class Meta:
        abstract = True

class ActualModel(BaseModelInterface):
    [...normal model code...]

文档:http://docs.djangoproject.com/en/1.3/ref/models/options/

话虽如此,通常鸭子类型被认为是“Python方式”,并且您的调用代码应该测试方法存在(if hasattr(instance, 'method_name'))。也就是说,你比我们更了解你的特定实现,所以你可以使用abstract = True来获得你想要的行为。 :)

答案 1 :(得分:1)

我认为这更像是一个Python问题。你当然可以看Django abstract base classes,但我建议你做更多的pythonic事情,不要担心尝试强制执行这些类接口。要么你实现了这个方法,要么你没有实现,让调用代码处理它。