寻求设计django模型的帮助

时间:2015-06-11 11:25:56

标签: python django django-models

我正在为我正在进行的项目寻找django模型的一些反馈。所以我建立了一个文档数据库,其中文档可以分为3类--GTO,EWR和QPR。这些文件中的每一个都对应一个井。每个井都可以有多个与之相关的文件。用户可以上传和查看与井相对应的文件。这就是我的设计:

basedoc - 用于保存文档属性的类,将作为基类。

井 - 保持良好属性的类。

GTO - 继承自basedoc并使用外键与井链接。

EWR - 继承自basedoc并使用外键与井链接。

QPR - 继承自basedoc并使用外键与井链接。

class basedoc(models.Model):
    docfile = models.FileField(upload_to='documents/%Y/%m/%d')
    title = models.CharField("Doc Title",max_length=50)
    pub_date = models.DateTimeField('Date published',auto_now_add=True)
    remark = models.TextField(max_length=200,blank=True)
    publisher = models.ForeignKey(User)

    def __str__(self):
        return self.title

class wells(models.Model):
    well_name = models.CharField(max_length=20)
    well_loc = models.CharField(max_length=20)

    def __str__(self):
        return self.well_name

class GTO(basedoc):
    gto = models.ForeignKey(wells)
    pass

class EWR(basedoc):
    ewr = models.ForeignKey(wells)
    pass

class QPR(basedoc):
    qpr = models.ForeignKey(wells)
    pass

我最初使用了basedoc作为抽象基类,但是因为我想将所有文档的列表作为视图返回给用户。请帮助我改进这个设计。谢谢。

1 个答案:

答案 0 :(得分:1)

您可能需要不时检索wells的所有文档。或者,您可能需要将文档从GTO移至EWR。为了提高效率,我不会使用3个表而是1个。

您可以使用选择:

TYPE_CHOICES = (
    (1, 'GTO'),
    (2, 'EWR'),
    (3, 'QPR'),
)

class Document(models.Model):
    # ...your other fields here...
    type = models.IntegerField(choices=TYPE_CHOICES)