将多个外键作为逗号分隔值保存到CharField中是一种好习惯

时间:2014-01-23 11:10:41

标签: django django-models django-queryset

只是想知道将多个外键保存到单个Char字段是否有用,以避免多个DB调用保存并维护OnetoOne关系。情况就是这样。

人物模型

class Person(models.Model):
   first_name = models.CharField(max_length=20, null=False, blank=False)
   first_name = models.CharField(max_length=20, null=False, blank=False)
   .....
   .....
   .....  

二级学位模型

class SecondaryDegree(models.Model):
   name = models.CharField(max_length=100, null=False, blank=False)

具有OnetoOne关系的人员中学学位

class PersonSecondaryDegree(models.Model):
   nomination_profile = models.OneToOneField('Person',null=False, blank=False)

   # Here i am using CharField instead of ForiegnKey.
   secondary_degree = models.CharField(max_length=255, null=False, blank=False) 

   is_deleted = models.BooleanField(default=False)
   last_modified = models.DateTimeField(auto_now_add=True,null=False,blank=False)

1 个答案:

答案 0 :(得分:2)

我不建议使用CharField来存储外键ID。它将阻止您对简单操作使用标准SQL查询,从而阻止您使用Django ORM中的相关功能。

通常最好为数据库提供一个逻辑结构,而不是为性能做出结构牺牲。还有许多其他方法可以提高性能,例如索引和缓存。如果您这样做,它将为您提供最大的灵活性。