我有一个数据库,其中包含 50,000 种药物(药物)的元数据,这些元数据按层次排序(分类称为 ATC)。心脏药物的例子如下:
- 一个
- -- A10
- ---- A10X,美托洛尔
有些药物有4个级别。
我需要为每种药物生成一个单独的页面。在 wagtail/django 中执行此操作的最有效方式是什么,包括考虑到用户需要一种简单直观的方式来搜索数据库。
我试过django-mptt,定义了以下模型。
class ATCChapter(MPTTModel): # MAIN CHAPTER
chapter_letter = models.CharField(max_length=255, null=True, blank=True) # E.g "A"
chapter_title = models.CharField(max_length=255, null=True, blank=True) # E.g "Cardiac drugs"
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
class MPTTMeta:
order_insertion_by = ['chapter_letter']
class ATCSubchapter(MPTTModel): # SUBCHAPTER
subchapter_letter = models.CharField(max_length=255, null=True, blank=True) # E.g "A10"
subchapter_title = models.CharField(max_length=255, null=True, blank=True) # E.g "Drugs used in heart failure"
parent = TreeForeignKey(ATCChapter, on_delete=models.CASCADE, null=True, blank=True, related_name='subchapter')
class MPTTMeta:
order_insertion_by = ['subchapter_letter']
class ATCDrug(MPTTModel, Page): # INDIVIDUAL DRUG
drug_code = models.CharField(max_length=255, null=True, blank=True) # E.g "A10X"
drug_name = models.CharField(max_length=255, null=True, blank=True) # E.g "Metoprolol"
parent = TreeForeignKey(ATCSubchapter, on_delete=models.CASCADE, null=True, blank=True, related_name='disease')
class MPTTMeta:
order_insertion_by = ['drug_code']
进行迁移会引发以下错误:class ATCDrug(MPTTModel, Page): TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
这可以通过不让类从 Page 继承来解决,这当然是不好的。我删除了 Page 并尝试了模型,但无法验证父子方案是否正确。
问题:考虑到目标,我是否在做明显错误或次优的事情。
系统:Wagtail 2.10,Postgresql,计划使用 Algolia 进行搜索。
感谢任何建议。