首先,我知道這個問題可能已經被回答了,但是我打開另外一個問題有兩個原因:顯然,一個是我正在努力Django語法。其次,也許更重要的是,我不太確定我的數據庫設置在這一點上是否有意義。所以,請忍受我。Django:鏈接兩張表
我在醫院工作,我的日常工作之一是,通常一種藥物可以有很多不同的名稱。所以,我認爲用一些Django來練習是一件好事。
基本上我想要兩個數據庫:一個簡單地將藥物「暱稱」鏈接到它的實際名稱。還有一個將實際名稱與一些附加信息聯繫在一起的東西,這些東西是維基頁面的一些內容。
我想出迄今:
(django)[email protected]:~/medwiki$ cat medsearch/models.py
from django.db import models
# Create your models here.
class medsearch(models.Model):
proprietary_name = models.CharField(max_length = 100, unique = True)
non_proprietary_name = models.CharField(max_length = 100, unique = True)
def __str__(self):
return self.non_proprietary_name
class medwiki(models.Model):
proprietary_name = models.ForeignKey('medisearch', on_delete=models.CASCADE)
cetegory = models.CharField(max_length = 255)
#wiki = models.TextField() etc.
def __str__(self):
return self.proprietary_name
(django)[email protected]:~/medwiki$
所以,我可以添加一個新的「medsearch對象」就好了。但是,當在medwiki處添加「類別」時,我得到__str__ returned non-string (type medsearch)
。據推測,因爲medsearch中有多個關鍵字?因此,我懷疑「FroeignKey」不適合這個應用程序,並且我知道在Django中還有其他方法可以鏈接數據庫。但是,我不知道選擇哪一個以及如何正確實施。
希望你們中的一些人有一些想法?
編輯:這裏是我想出迄今:
class Proprietary_name(models.Model):
proprietary_name = models.CharField(max_length = 100, unique = True)
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)
category = models.ManyToManyField(Category)
wiki_page = models.TextField()
def __str__(self):
return self.non_proprietary_name
現在我可以通過屬性不同的categorys和不同的proprietary_names到一種藥物。迄今爲止效果很好。
因此,當我知道專有的「暱稱」時,查找非專有名稱。
>>> Mediwiki.objects.get(proprietary_name__proprietary_name="Aspirin")
<Mediwiki: acetylsalicylic acid>
>>>
但是,我也想顯示所有proprietary_names,當我知道non_proprietary_name。我是否必須進一步更改數據庫設計,還是隻是在這裏錯過了其他一些東西?
「一個單一的藥物可以有很多不同的名字」在你們例子,這表有主的名字,哪一個有其他的名字。 –
你的關於'__str__'的問題在答案中得到了充分的回答,但是你的數據庫設計有嚴重的問題。首先 - 您將專有名稱與非專有(通用)名稱一起存儲;因爲一個通用名稱可能有許多專有名稱,這意味着您將在許多地方存儲相同的名稱,如果需要更正它,不必要地佔用空間並使其成爲惡夢。正確的數據庫設計主題太寬泛以至於無法發表評論甚至是答案,我建議先閱讀一本關於關係數據庫設計的書。 – rafalmp
@François主要名稱將是「non_proprietary_name」。暱稱將是「專有名稱」(s)。 – theCed7