【发布时间】:2016-02-28 04:37:55
【问题描述】:
我对 django 中的数据模型有一个想法,我想知道是否有人可以指出这两种设置的优缺点。
设置 1:这很明显。对每个对象的每个字段使用 CharFields
class Person(models.Model):
name = models.CharField(max_length=255)
surname = models.CharField(max_length=255)
city = models.CharField(max_length=255)
设置 2:这是我正在考虑的。对包含当前对象应具有的值的对象使用 ForeignKey。
class Person(models.Model):
name = models.ForeignKey('Name')
surname = models.ForeignKey('Surname')
city = models.ForeignKey('City')
class Chars(models.Model):
value = models.CharField(max_length=255)
def __str__(self):
return self.value
class Meta:
abstract = True
class Name(Chars):pass
class Surname(Chars):pass
class City(Chars):pass
所以在 setup 1 中,我将创建一个对象:
Person.objects.create(name='Name', surname='Surname', city='City')
每个对象都有自己的数据。在设置 2 中,我必须这样做:
_name = Name.objects.get_or_create(value='Name')[0]
_surname = Surname.objects.get_or_create(value='Surname')[0]
_city = City.objects.get_or_create(value='City')[0]
Person.objects.create(name=_name, surname=_surname, city=_city)
问题:这样做的主要目的是为多个对象重用现有值,但是当您考虑到需要多次点击数据库来创建对象时,这样做值得吗?
【问题讨论】:
-
我更喜欢第三种设置:gender 是一个整数字段(如果你是更保守的人,则为布尔值:)并且在 django 代码中的某处定义了枚举。
-
是的,变量是什么无关紧要...我将其更改为城市以避免混淆
标签: python django postgresql django-models