Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-OneToOne油田_Python_Django_Url - Fatal编程技术网

Python Django-OneToOne油田

Python Django-OneToOne油田,python,django,url,Python,Django,Url,现在我正在处理一个url映射。假设我有三个类,company、user和store,我的目标是它们的URL将位于相同的层次结构中。因为它们在url中是相同的层次结构,所以我必须创建一个类url_映射,以确保没有重复的名称。让我给出一个更具体的问题 Class Company(models.Model): company_name = models.CharField(max_length=30) url_mapping = models.OneToOneField(URL_

现在我正在处理一个url映射。假设我有三个类,company、user和store,我的目标是它们的URL将位于相同的层次结构中。因为它们在url中是相同的层次结构,所以我必须创建一个类url_映射,以确保没有重复的名称。让我给出一个更具体的问题

Class Company(models.Model):
    company_name  = models.CharField(max_length=30)
    url_mapping   = models.OneToOneField(URL_mapping)

Class User(models.Model):
    user_name  = models.CharField(max_length=30)
    url_mapping   = models.OneToOneField(URL_mapping)

Class store(models.Model):
    store_name  = models.CharField(max_length=30)
    url_mapping   = models.OneToOneField(URL_mapping)

Class URL_mapping(models.Model):
    url         = models.CharField(max_length=30)
现在,当访问者使用某个url访问我的站点时,我将在url_映射类中匹配该url,然后进行反向查找,查看公司、用户和商店之间的url类型

由于用户、商店和公司具有不同的查看功能,我们是否可以使用反向查找快速直接返回到相应的查看功能?或者我应该在URL_映射中添加另一个字段,说明它是哪种URL类型

例如

http://www.example.com/levis       ->  will handle by brand_views
http://www.example.com/david       ->  will handle by user_views
http://www.example.com/mancy       ->  will handle by store_views
在数据库中,我们将

url_mapping
id:1, name:levis
id:2, name:david
id:3, name:mancy

user
id:1, name:david, url_mapping:2

brand
id:1, name:levis, url_mapping:1

store
id:1, name: mancy, url_mapping:3
其中url_映射是oneToOneField

现在不知道如何从url_映射类快速查找


谢谢。

我把你的问题理解为“我有一个URL,我想去相应的商店、公司或用户”

你可以使用

URL_mapping.objects.get(url).user
URL_mapping.objects.get(url).store
URL_mapping.objects.get(url).company
很明显,其中2个会给你一个错误,你不知道它映射到哪个

在我看来,对于你真正想要的东西,你真的应该使用

那么,您将能够:

URL_mapping.objects.get(url)

其中将有相应的
用户
公司
商店
模型。

我理解您的问题是“我有一个URL,我想去相应的商店、公司或用户”

你可以使用

URL_mapping.objects.get(url).user
URL_mapping.objects.get(url).store
URL_mapping.objects.get(url).company
很明显,其中2个会给你一个错误,你不知道它映射到哪个

在我看来,对于你真正想要的东西,你真的应该使用

那么,您将能够:

URL_mapping.objects.get(url)
将具有相应的
用户
公司
商店
模型

  • 我会在每个模型(公司、用户、商店)中使用
    SlugField
    ,作为它们的标识符

  • 理论上,您根本不需要任何URL映射表,在处理请求的视图中,提取URL的最后一部分,即标识公司、用户或商店的slug,然后搜索公司,然后搜索用户,然后搜索给定slug的商店模型。找到对象时停止

  • 为了提高速度,您可以像以前一样创建一个辅助模型,并按照Lakshman Prasad的建议使用
    GenericForeignKey
    关系。在这个辅助模型中,我再次使用
    SlugField
    作为标识符。如果你使用它,你不需要在你的主要模型中使用slug

  • 我个人认为这是一个糟糕的设计。首先,我怀疑这些URL是否完整。第二,要使其工作,您的主要模型中的slug必须在这三个模型中是唯一的,这只能通过外部机制来确保,您不能在这里使用
    唯一的
    约束。您的
    URL\u映射
    模型就是这样一种机制。它基本上在模型外部存储三个模型的段塞,如果在
    URL\u映射中向
    SlugField
    添加
    UNIQUE
    约束,则确保段塞在主模型中是唯一的

  • 我会在每个模型(公司、用户、商店)中使用
    SlugField
    ,作为它们的标识符

  • 理论上,您根本不需要任何URL映射表,在处理请求的视图中,提取URL的最后一部分,即标识公司、用户或商店的slug,然后搜索公司,然后搜索用户,然后搜索给定slug的商店模型。找到对象时停止

  • 为了提高速度,您可以像以前一样创建一个辅助模型,并按照Lakshman Prasad的建议使用
    GenericForeignKey
    关系。在这个辅助模型中,我再次使用
    SlugField
    作为标识符。如果你使用它,你不需要在你的主要模型中使用slug

  • 我个人认为这是一个糟糕的设计。首先,我怀疑这些URL是否完整。第二,要使其工作,您的主要模型中的slug必须在这三个模型中是唯一的,这只能通过外部机制来确保,您不能在这里使用
    唯一的
    约束。您的
    URL\u映射
    模型就是这样一种机制。它基本上在模型外部存储三个模型的段塞,如果在
    URL\u映射中向
    SlugField
    添加
    UNIQUE
    约束,则确保段塞在主模型中是唯一的


  • 你能解释一下你所说的url层次结构和同一层次结构中的三个类是什么意思吗?这在我看来很复杂。:)嗨,我现在用一个例子来解释我的问题。谢谢。你能解释一下url层次结构和同一层次结构中的三个类是什么意思吗?这在我看来很复杂。:)嗨,我现在用一个例子来解释我的问题。谢谢