Oft kann ein einzelnes Medikament viele "Spitznamen" haben, die verwirrend werden. Also versuche ich eine kleine Django-App zu bauen, die mir dabei hilft.Viele-zu-viele Datenbank-Design mit Django
Was es tun sollte, ist entweder die Drogen acutal Name (non_proprietary_name) auf seinen "Spitzname" (proprietary_name) oder umgekehrt.
Zum Beispiel sind "Aspirin" und "ASS" der geschützte Name für "Acetylsalicylsäure".
Um es ein wenig weiter zu komplizieren habe ich beschlossen, eine kleine Wiki-Seite und Kategorien hinzuzufügen (auch ein Medikament kann in viele verschiedene Kategorien fallen).
Leider bin ich nicht sehr vertraut mit Datenbank-Design, das ist, wo ich ein bisschen Hilfe brauche.
Was ich bisher habe:
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
~
Also, wenn ich die proprietary_name habe ich auf die non_proprietary_name beziehen können:
>>> Mediwiki.objects.get(proprietary_name__proprietary_name='Aspirin')
<Mediwiki: acetylsalicylic acid>
Aber ich habe Probleme bekommen alle nicht-proprietären_namen, wenn ich den proprietären_namen eingeben. Ist das ein Problem mit meiner Datenbank oder fehlt mir etwas anderes?
EDIT:
New models.py basierend auf den Kommentaren:
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
Also, es funktioniert! Aber ich bin nicht so sicher, warum .. Ist das der beste Weg, es zu tun? Was ist mit den Kategorien? Sollten sie auch auf Fremdschlüssel umgestellt werden?
>>> 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>]
>>>
Was haben Sie versucht? –