【发布时间】:2009-12-01 22:49:01
【问题描述】:
我正在提取各种信息源来建立一个人的档案。一旦我这样做了,我想灵活地以不同的方式看待一个人。我在 django 方面没有很多经验,所以我想对我的模型进行批评(要温柔)。诚然,即使在我编写此代码时,我也在考虑冗余(反对 DRY),但我想知道其他人的想法。 FWIW - 这些数据是拉而不是创建的 - 所以也许我不应该保留它,但删除数据似乎很糟糕..
具体来说,我想知道使用多对多是否合适,或者您是否会亲吻并将每个条目保留为自己的,而不需要任何多对多业务。从长远来看,我认为 KISS 会使更新它变得简单(一个基本的 for 循环),但是在能够查询一个人(比如基于 location_description 或 job_function)方面存在权衡。无论如何,我会很感激一些意见。
class Person(models.Model):
"""This simply builds a notes user"""
aliases = models.ManyToManyField(Aliases) #Hmm this is list..
assistant = models.CharField(max_length = 255, blank = True)
cell_phone = models.CharField(max_lenth = 16, blank = True)
city = models.ManyToManyField(City)
country = models.ManyToManyField(County)
department = models.ManyToManyField(Department)
departmeht_number = models.ManyToManyField(Department_Number)
division_code = models.ManyToManyField(Division_Code)
email = models.EmailField(max_length = 50)
functional_area = models.ManyToManyField(Functional_Area)
# jpeg = models.
job_classification = models.ManyToManyField(Job_Classification)
job_classification_code = models.ManyToManyField(Job_Classification_Code)
last_name = models.CharField(max_length = 255)
location_description = models.ManyToManyField(Location_Description)
location_path = models.ManyToManyField(Location_Path)
mail_address = models.CharField(max_length = 255, blank = True)
mail_domain = models.ManyToManyField(Mail_Domain)
mail_file = models.CharField(max_length = 255, blank = True)
mail_server = models.ManyToManyField(Mail_Server)
match_pct = models.CharField(max_lenth = 6)
name = models.CharField(max_length = 255)
name_reverse = models.CharField(max_length = 255)
nickname = models.CharField(max_length = 32)
notes_url = models.URLField()
# object_class = models.
office_phone = models.CharField(max_length = 255, blank = True)
other_phone = models.CharField(max_length = 255, blank = True)
position = models.ManyToManyField(Position)
section = models.ManyToManyField(Section)
section_code = models.ManyToManyField(SectionCode)
shift = models.ManyToManyField(Shift)
state = models.ManyToManyFiedl(State)
supervisor = models.ManyToManyField(Supervisor)
supervisor_reverse = models.ManyToManyField(Supervisor_reverse)
uid = models.CharField(max_length = 128)
def __unicode__(self):
return str(self.name)
【问题讨论】:
-
在仔细考虑对象层次结构后,通常这样的事情可以归结为很多。
-
我认为您应该在此处将 KISS 定义为“有用块中的细分信息”。它将导致用于选择、过滤……的良好对象层次结构以及具有较少 NULL 值的打包数据库。
-
vikingosegundo - 好建议 - 我遵循大多数人的建议。但是越来越少的空值不断回来!谢谢
标签: django django-models coding-style python