[英]Location database model for breadcrumb on a website using Django
我正在設計一個網站,該網站將事件的位置作為存儲和顯示的信息的一部分。
該位置可以是大洲,國家/地區,州/省或城市。 顯示事件時,我希望為該事件生成面包屑。
例如,如果事件在巴黎:
歐洲/法國/法蘭西島/巴黎
面包屑中的每個項目都是可單擊的,並將調出該位置的事件列表。 它不會為其子區域帶來事件。
我想使數據庫設計與Django及其模型和管理功能兼容。
我也不想加載所有將不使用的國家,地區和城市的位置表。 我想將它們添加到數據庫中,因為生成了需要新位置的事件。
我最初的想法是每種位置類型的表,然后在事件表中有四列可為空。 與事件關聯的位置類型將由哪個位置列為非空來確定。
Event:
name varchar
continent_id int NULL
country_id int NULL
region_id int NULL
city_id int NULL
Continent:
id int
name varchar
Country:
id int
name varchar
countinent_id int
Region:
id int
name varchar
country_id int
Country:
id int
name varchar
region_id int
另一種選擇是將位置存儲為varchar,並將所有位置信息存儲在一個列中
Event:
name varchar
location varchar
example:
name: Art Festival
location: Europe:France:Île-de-France:Paris
關於方法或可行性的任何想法將不勝感激。
好吧,由於反應熱烈。 我自己做的:
models.py
class Event(TimeStampedModel):
title = models.CharField(max_length=100)
continent = models.ForeignKey(
'Continent',
on_delete=models.SET_NULL,
blank=True,
null=True,)
country = models.ForeignKey(
'Country',
on_delete=models.SET_NULL,
blank=True,
null=True,)
region = models.ForeignKey(
'Region',
on_delete=models.SET_NULL,
blank=True,
null=True,)
city = models.ForeignKey(
'City',
on_delete=models.SET_NULL,
blank=True,
null=True,)
class Continent(models.Model):
name = models.CharField(max_length=20)
abbr = models.CharField(max_length=2)
def __str__(self):
return self.name
class Country(models.Model):
name = models.CharField(max_length=40)
abbr = models.CharField(max_length=3)
continent = models.ForeignKey(
'Continent',
on_delete=models.CASCADE,
related_name="countries",
related_query_name="country"
)
def __str__(self):
return self.name
class Region(models.Model):
name = models.CharField(max_length=40)
country = models.ForeignKey(
'Country',
on_delete=models.CASCADE,
related_name="regions",
related_query_name="region"
)
def __str__(self):
return self.name
class City(models.Model):
name = models.CharField(max_length=40)
region = models.ForeignKey(
'Region',
on_delete=models.CASCADE,
related_name="cities",
related_query_name="city"
)
def __str__(self):
return self.name
上面的設置使我可以邏輯地鏈接位置。 它還使我可以按任何區域類型搜索事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.