簡體   English   中英

在Django模型中如何處理模型常規屬性?

[英]What to do with model general attributes in django models?

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'

從而創建只有兩列的數據庫表?

在這個簡單的示例中,多余的db列將不是一個真正的問題。 但是,在我正在考慮的實際示例中,我將擁有大量這些模型范圍的屬性,並且為每個屬性創建一個多余的列似乎是一種浪費。

我將city移動到一個單獨的模型中,並從Office創建一個ForeignKey

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM