我正在创建一个产品ID转换应用。我有两个代表两种ID样式的模型:
class Id1(models.Model):
number = models.CharField(max_length=10)
converted = models.CharField(max_length=13)
status = models.CharField(max_length=5) # validation status
error = models.CharField(max_length=10) # error message
def __unicode__(self):
return self.number
class Id2(models.Model):
number = models.CharField(max_length=13)
converted = models.CharField(max_length=10)
status = models.CharField(max_length=5) # validation status
error = models.CharField(max_length=10) # error message
def __unicode__(self):
return self.number
我想将第三方Python(非Django)模块合并到Django模型中,原因有两个:
第三方模块具有以下类,每个类包含多个字段和方法:
...以及类方法调用的以下顶级函数:
但是,我不想在数据库中使用第三方模块的属性;每个数据库表应该只包含Django模型字段(数字和转换)。
如何实现这一目标?如果这是不可能的,有什么方法可以解决这个问题?将逻辑委托给视图?
[编辑] 我忘了添加我想使用模块方法初始化一些字段,如“转换”,“状态”和“错误”。知道怎么做吗?
答案 0 :(得分:0)
嗯,可能有几种方法:
首先,您可以导入模块并将其相关逻辑封装在模型对象内的自定义方法中,如下所示:
import module
class Id1(models.Model):
...
def custom_validate_method(self):
# instantiate modules classes needed
# write the logic needed
然后,您将能够使用Id1
类的任何实例调用此方法。或者你可以覆盖save()
方法,当你试图像这样持久化对象时执行一些额外的逻辑:
def custom_validate_method(self):
# instantiate modules classes needed
# write the logic needed
def save(self, *args, **kwargs):
# perform logic (maybe call custom_validate_method)
return super(Id1, self).save(*args, **kwargs)
你也可以使用多重继承来实现这一点但是观察它,多重继承会带来一些名称冲突。它看起来像这样:
import module
class Id1(models.Model, module.Class):
number = models.CharField(max_length=10)
converted = models.CharField(max_length=13)
def __unicode__(self):
return self.number
您在Id1类中继承的模块中具有所需类的功能。
希望它有所帮助。