多くの場合、単一の医薬品には混乱を招く「ニックネーム」が多いことがあります。だから私はこの問題を解決するための小さなDjangoアプリを作ろうとしています。Djangoを使用した多対多のデータベース設計
何がすべきかは、薬物名(non_proprietary_name)をその「ニックネーム名」(proprietary_name)またはその逆にするかどうかです。
たとえば、「アスピリン」および「ASS」は、「アセチルサリチル酸」の専売名です。
これをもう少し複雑にするために、小さなWikiページとカテゴリを追加することにしました(また、薬物はさまざまなカテゴリに分類できます)。
悲しいことに、私はデータベース設計に慣れていないので、少し助けが必要です。
私がこれまで持っているもの:私はnon_proprietary_nameに関連することができproprietary_name持っている場合
from django.db import models
# Create your models here.
class Proprietary_name(models.Model):
proprietary_name = models.CharField(max_length = 100, unique = True) #nick name
def __str__(self):
return self.proprietary_name
class Category(models.Model):
category = models.CharField(max_length = 100, unique = True)
def __str__(self):
return self.category
class Mediwiki(models.Model):
proprietary_name = models.ManyToManyField(Proprietary_name)
non_proprietary_name = models.CharField(max_length = 100, unique = True) # actual name
category = models.ManyToManyField(Category)
wiki_page = models.TextField()
def __str__(self):
return self.non_proprietary_name
~
ので、:しかし
>>> Mediwiki.objects.get(proprietary_name__proprietary_name='Aspirin')
<Mediwiki: acetylsalicylic acid>
を、私はトラブルになっを抱えています私が独占的なものを入力すると、すべてのnon_proprietary_names。これは私のデータベースの問題ですか、それとも他に何か不足していますか?
編集:コメントに基づいて
新models.py:だから
from django.db import models
# Create your models here.
class Category(models.Model):
category = models.CharField(max_length = 100, unique = True)
def __str__(self):
return self.category
class Mediwiki(models.Model):
non_proprietary_name = models.CharField(max_length = 100, unique = True)
category = models.ManyToManyField(Category)
wiki_page = models.TextField()
def __str__(self):
return self.non_proprietary_name
class ProprietaryName(models.Model):
proprietary_name = models.CharField(max_length = 100, unique = True)
non_proprietary_name = models.ForeignKey(Mediwiki)
def __str__(self):
return self.proprietary_name
、それは働きます!しかし、私はそれほど確かではありません。これを行う最良の方法はありますか?また、カテゴリーはどうですか?彼らは外国の鍵にも変わるべきですか?
>>> Mediwiki.objects.get(proprietaryname__proprietary_name="Aspirin")
<Mediwiki: acetylsalicylic acid>
>>>
>>> ProprietaryName.objects.get(proprietary_name="Aspirin").non_proprietary_name
<Mediwiki: acetylsalicylic acid> # Works also, what's preferable?
>>>ProprietaryName.objects.filter(non_proprietary_name__non_proprietary_name="acetylsalicylic acid")
[<ProprietaryName: Aspirin>, <ProprietaryName: ASS>]
>>>
何を試しましたか? –