[英]Array of foreign keys in Django Model
我不確定這是最好的標題,但是我很難簡單地表述它。 基本上,我正在創建一個代表業務的模型。 其中包括地址,營業時間等。這是讓我感到震驚的營業時間。 我有我的地址
class Address(models.Model):
--snip--
Business = models.ForeignKey(BusinessInfo)
因此,每個公司都有一個或多個位置地址。 我正在尋找與Hours類似的方法
class HoursOnDay(models.Model):
open = isOpen = models.BooleanField()
open = models.TimeField(null=True)
closed = models.TimeField(null=True)
我要執行的是每個業務必須有一個7 HoursOnDay的數組-一周的每一天。 我似乎無法偶然發現明顯而優雅的方法。 有沒有一種在Django中建模的好方法?
使用ManyToManyField:
class HoursOnDay(models.Model):
is_open = models.BooleanField()
open = models.TimeField(null=True)
closed = models.TimeField(null=True)
class Day(models.Model):
hours = models.ManyToManyField(HoursOnDay)
class Business(models.Model):
days = models.ManyToManyField(Day)
如果您希望限制7小時和7天,則可以選中“ 限制要創建的模型實例數”
我遇到了類似的問題(一天中的每個小時都需要一堆字段),並得出以下結論:
最簡單的方法是不要嘗試做任何明智的事情。 如果您需要一堆字段七次,只需復制粘貼字段並給它們提供不同的后綴或前綴。 例如:
class Business(models.Model):
--snip--
monday_is_open = models.BooleanField()
monday_opens_at = models.TimeField(null=True)
monday_closes_at = models.TimeField(null=True)
tuesday_is_open = models.BooleanField()
tuesday_opens_at = models.TimeField(null=True)
tuesday_closes_at = models.TimeField(null=True)
wednesday_is_open = models.BooleanField()
wednesday_opens_at = models.TimeField(null=True)
wednesday_closes_at = models.TimeField(null=True)
...
sunday_is_open = models.BooleanField()
sunday_opens_at = models.TimeField(null=True)
sunday_closes_at = models.TimeField(null=True)
當然,美國人(還有其他人?)會從星期日開始,但是您明白了。
采用這種方法可以大大簡化更新開放時間。 這種方法(以及您要求的方法)無法模擬每周更改開放時間的模型,但這可能也不是您所需要的。
另外,如果您關心模式規范化,請擺脫is_open,而只需使用xxx_opens_at__isnull=True, xxx_closes_at__isnull=True
使用xxx_is_open=True
。
您仍然可以在Business.clean()
整個工作日中通過迭代來做一些聰明的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.