簡體   English   中英

使用Django的網站上面包屑的位置數據庫模型

[英]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.

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