我对django中的数据模型有一个想法,我想知道是否有人可以指出这两个设置的优点和缺点。ForeignKey与CharField
设置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用于包含当前Object应具有的值的对象。
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
所以在设置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)
问:这个主要目的是要重复使用多个对象存在的值,但是这件事值得去做,当你考虑到你需要多个点击数据库来创建一个对象?
我宁愿第三次设置:性别是一个整数字段(或布尔如果你是更保守的人:),并有在Django代码中的某处定义的枚举。 –
是的,这个变量没有什么区别......为了避免混淆,我会将其改为城市 – Ubica