【发布时间】:2017-07-24 08:17:32
【问题描述】:
我有一个模型TranslationService,它有一些字段和方法应该被每个新服务覆盖。我有三个服务:Google、Azure、Bing,它们是系统中唯一的(我们只有一个 Google 服务和一个 Azure 服务等)。我需要执行这样的操作:TranslationService.objects.filter(service_name=service_name)。
但如果我将TranslationService 设为抽象,我将无法遍历 abst 类,因为它不是在 DB 中创建的。如果我进行继承,我应该在模型之类的代码中实现覆盖方法的逻辑,然后通过控制台创建GoogleService。这是唯一的方法还是我可以减少通过控制台创建对象。
如何设计我的模型以在 translation_services 中执行搜索?
class TranslationService(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
service_name = models.CharField(max_length=40)
base_url = models.CharField(max_length=255)
api_version = models.FloatField()
def get_step_translation(self, pk, lang, lesson):
pass
def create_step_translation(self, pk, lang, type):
pass
class GoogleTranslator(TranslationService):
base_url = "https://google.com"
service_name = "Google"
api_version = 1.5
def get_step_translation(self, pk, lang, lesson, **kwargs):
... some logic
def create_step_translation(self, pk, lang, type):
... some logic
【问题讨论】:
标签: python django inheritance design-patterns django-models