我是Django和数据库的新手。
假设我正在尝试创建一个充满各种贵族信息的数据库。因此,将有许多不同的国家可能具有“君主”地位,在不同时期由不同的人,男性和女性持有。有几个国家可能称之为国王/王后,也许只有一个国家称之为沙皇/沙皇。但这些是固定的。 我对建模的初步印象可能类似于
class Person(models.Model):
SEX_CHOICES = (
'm': 'Male',
'f': 'Female'
)
name = models.CharField(max_length=200)
birthdate = models.DateField()
sex = models.CharField(max_length = 2, choices = SEX_CHOICES)
titles = models.ManyToManyField(Title, through='TitleOccupation')
class Country(models.Model):
#...
class Title(models.Model):
country = models.ForeignKey(Country)
#...
class TitleOccupation(models.Model):
title = models.ForeignKey(Title)
date_start = models.DateField()
date_end = models.DateField(null = True, blank=True)
我正在试图弄清楚如何结合一个国家的标题的独特性,同时认识到它们之间有许多相似之处。标题可能代表“英格兰的君主”,如果是男性,君主将被称为国王,如果是女性,则称为女王。可能还有许多其他国家,君主被称为国王或王后,但也有其他国家的独特标题代表相同的想法。 我曾想过要包括某种额外的模型,例如,代表君主制的位置,然后以某种方式包括名称前缀(King等)的选择。但后来似乎我正在产生更大的体积。
class Position(model.Model):
#...
TITLES_MALE = (
'King',
'Tsar',
'Emperor',
...
)
TITLES_FEMALE = (
'Queen',
'Tsarina',
'Empress',
...
)
与此同时,较不尴尬的选项可能是为每个标题添加男性和女性名称前缀。但这实际上不那么尴尬吗?也许这会在试图显示一个人的名字时造成大量浪费的空间和时间。
p = Person.objects.get(name='???')
p.get_title(p.titles.filter(...))
其中get_title
是Person模型中的一些方法,它根据Person的性别在男性或女性集合中查找Title的名称前缀。这对我来说同样尴尬。
我已经研究了Django的一些本地化信息以获得一些见解,但我无法将其中的任何内容推断为这种语言内的“本地化”。