2014-07-23 111 views
1

应该对模型的所有实例共有的django模型属性做些什么?举例来说,如果我有一间办公室,每个办公室都有一个房间号和电话号码的Django的模型,是在一个特定的城市,我可以做这样的事情:在Django模型中如何处理模型的一般属性?

class Office(models.Model): 
    room = models.CharField(max_length=3) 
    phone = models.CharField(max_length=8) 
    city = models.CharField(max_length=20) 

但如果我是定义一个办公室的django模型,根据定义,该模型的所有实例都具有相同的城市?我可以做这样的事情:

class LondonOffice(models.Model): 
    room = models.CharField(max_length=3) 
    phone = models.CharField(max_length=8) 
    city = models.CharField(default='London', max_length=20) 

但在这种情况下,city场是多余的,并创建数据库不必要的列。这样做会更好吗?

class LondonOffice(models.Model): 
    room = models.CharField(max_length=3) 
    phone = models.CharField(max_length=8) 
    city = 'London' 

等等创建一个只有两列的数据库表?

在这个简单的例子中,额外的数据库列不会是一个真正的问题。然而,在我正在考虑的实例中,我将拥有更多的这些模型属性,并为每个属性创建额外的和不必要的列,这似乎是浪费。

回答

1

我希望移居city到一个单独的模型,并创建一个ForeignKey将其从Office

class City(models.Model): 
    name = models.CharField(max_length=20) 


class Office(models.Model): 
    room = models.CharField(max_length=3) 
    phone = models.CharField(max_length=8) 
    city = models.ForeignKey(City) 

或者,如果城市的名单是静态的,预先定义的,你可以使用choices

CITIES = (
    (0, 'London'), 
    (1, 'New York'), 
    (2, 'Moscow'), 
) 

class Office(models.Model): 
    room = models.CharField(max_length=3) 
    phone = models.CharField(max_length=8) 
    city = models.CharField(choices=CITIES) 
+0

简单,我喜欢它。 – Azar