首先,我意识到这个问题可能已经得到了回答,但有两个原因让我开始提出另一个问题:一个很明显,我正在努力使用Django语法。其次,也许更重要的是,我不太确定我的数据库设置在这一点上是否有意义。所以,请耐心听我说。
我在一家医院工作,我每天都会遇到的一个问题是,一种药物通常会有很多不同的名称。所以,我认为这是一个很好的任务来练习一些Django。
基本上,我想要两个数据库:一个简单地将药物的“昵称”与它的实际名称联系起来。另一种是将实际名称链接到一些附加信息,类似于维基页面的内容。
到目前为止,我想出的是:
(django)django@ip:~/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)django@ip-:~/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现在我可以将不同的类别和不同的proprietary_names归因于一种药物。到目前为止,它工作得很好。
当我知道专有的“昵称”时,查找非专有名称也是如此。
>>> Mediwiki.objects.get(proprietary_name__proprietary_name="Aspirin")
<Mediwiki: acetylsalicylic acid>
>>>但是,当我知道proprietary_names时,我也想显示所有的non_proprietary_name。我是否必须进一步更改数据库设计,或者我只是在这里遗漏了一些其他东西?
发布于 2016-07-25 05:14:07
这将会起作用:
return self.proprietary_name.proprietary_name但这并不是真的有意义!
主要问题是您调用了medsearch的外键proprietary_name。
第二个问题只是一个常规问题。在Python (和许多编程语言)中,类必须以大写字母开头。
下面的代码会更好:
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):
med_search = models.ForeignKey('MedSearch', on_delete=models.CASCADE, related_name='wikis')
cetegory = models.CharField(max_length = 255)
#wiki = models.TextField() etc.
def __str__(self):
return self.med_serach.proprietary_name发布于 2016-07-25 05:13:18
正如您所注意到的,medwiki上的proprietary_name字段是一个ForeignKey。您不能直接从__str__方法返回该值,因为它需要返回一个字符串。在返回之前,您需要将该值转换为字符串:或者使用medsearch实例的默认字符串表示:
return str(self.proprietary_name)或者选择要返回的特定字符串字段:
return self.proprietary_name.proprietary_namehttps://stackoverflow.com/questions/38556735
复制相似问题