我正在为我正在进行的项目寻找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作为抽象基类,但是因为我想将所有文档的列表作为视图返回给用户。请帮助我改进这个设计。谢谢。
答案 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)