2011-10-03 3 views
1

이제는 하나의 URL 매핑을 만들고 있습니다. 세 개의 클래스, 회사, 사용자 및 상점이 있다고 가정 해 봅시다. 목표는 URL이 동일한 계층 구조에 있다는 것입니다. 그들은 URL에서 동일한 계층이기 때문에 중복 이름이 없도록 클래스 url_mapping을 만들어야합니다. 제가 좀 더 구체적인 문제를 드립시다. 특정 URL을 내 사이트 방문자 액세스, 나는 URL_mapping 클래스의 URL과 일치하고 역방향 조회를하고 회사 사용자 사이의 URL의 유형을 확인하고 저장할 수 있습니다 지금Django OneToOne 필드

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 유형을 지정해야합니까?

예는

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가 oneToOneField됩니다

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_mapping 클래스를 빠르게 찾는 방법을 모르겠습니다.

감사합니다.

+0

URL 계층 구조와 세 계층 구조가 같은 계층 구조에 있다는 것을 설명하겠습니까? 이것은 나에게 매우 복잡하게 보입니다. :) – akonsu

+0

안녕하세요, 지금 예제를 사용하여 내 문제를 설명합니다. 감사. –

답변

1
  1. 각 모델 (회사, 사용자, 상점)에서 SlugField을 식별자로 사용합니다.

  2. 이론적으로 요청을 처리하는보기에서 URL 매핑 테이블이 전혀 필요하지 않으며 회사, 사용자 또는 상점을 식별하는 슬러그 인 URL의 마지막 부분을 추출합니다. 회사, 회사, 사용자를 검색하고 주어진 슬러그에 대한 모델을 저장하십시오. 물건을 찾으면 그만하세요.

  3. 속도를 향상 시키려면 Lakshman Prasad가 제안한대로 보조 모델을 만들고 GenericForeignKey 관계를 사용할 수 있습니다. 이 보조 모델에서는 다시 식별자로 SlugField을 사용합니다. 그리고 이것을 사용하면 주 모델에 굼벵이가 필요하지 않습니다.

  4. 개인적으로 이것은 나쁜 디자인이라고 생각합니다. 첫째, 나는 이러한 URL이 REST-ful이 아닌지 의심 스럽습니다.둘째, 이것이 작동하려면 주 모델의 슬러그가이 세 모델에서 고유해야하며 외부 메커니즘으로 만 보장 될 수 있습니다. 여기서 UNIQUE 제약 조건을 사용할 수 없습니다. URL_mapping 모델은 이러한 메커니즘 중 하나 일뿐입니다. 기본적으로 모델 외부의 세 모델에 대한 슬러그를 저장하고 제약 조건을 SlugFieldURL_mapping으로 추가하는 경우 슬러그가 기본 모델에서 고유해야합니다.

3

나는 "URL이있어서 해당 상점, 회사 또는 사용자에게 가고 싶습니다."라는 질문을 이해합니다.

당신은

URL_mapping.objects.get(url).user 
URL_mapping.objects.get(url).store 
URL_mapping.objects.get(url).company 
분명히

이 2를 사용하는 당신에게 오류를 줄 것이라고 할 수 있으며, 당신은에 매핑 알고하지 않을 것입니다.

같은, 당신이 정말로 여기 찾고있는 것을 위해, 당신이 정말로 그래서, 당신은 할 수있을 것입니다 Generic Foreign Keys

사용해야 나에게 보인다 : 것

URL_mapping.objects.get(url) 

User 대응 Company 또는 Store 모델입니다.