扩展/继承第三方Django应用程序模型的后果

时间:2013-12-06 07:05:23

标签: django database-design django-models

我在Django项目中设置了第三方应用程序。有问题的模型是Tag模型。就像SO在问题下面有标记文本框一样,我想创建它们中的多个。如果你愿意,可以选择不同的课程。

示例:College_tag,department_tag,subject_tag等。

我知道修改第三方应用程序不是一个好主意所以我将扩展第三方APP的标签模型

同样在第三方应用程序中的“线程”模型与Tag有许多相似之处。

我要求的结果是“线程”模型应该有很多与College_tag,department_tag,subject_tag

此外,搜索应该是有效的。以前,我可以搜索标签。现在我应该可以在大学,系和科目上做到这一点。

  
      
  1. 我该如何设计?
  2.   
  3. 这应该在不触及第三方代码的情况下完成。
  4.   

2 个答案:

答案 0 :(得分:2)

from django.db import models
from YourTagModel import Tag
from YourThreadModel import Thread

class College_tag(Tag):
    pass
    #all the fields in the model Tag will be inherited


class Department_tag(Tag):
    pass

class MyThreadModel(Thread):
    College_tag_relation = models.ManyToManyField(College_tag)
    department_tag_relation = models.ManyToManyField(Department_tag)

这会在数据库映射中创建与Tag模型对象的关系,类似于一对一字段。但是django会像你期望继承一样对待它

答案 1 :(得分:1)

仅仅制作与Tag具有一对一关系的另一个模型是否有效?即

from django.db import models

class TagProfile(models.Model):
    tag = models.OneToOneField('taggit.tag')
    # add your custom fields here

到目前为止,无需破解第三方应用程序的模型代码或数据库架构。

KISS