문제

Django에는 세 가지 모델이 있습니다.

  • 단순 제품
  • 구성 가능한 제품 몇 가지 간단한 제품의 변형을 표시하는 대신 사용자는 색상과 같은 옵션이있는 하나의 제품을 볼 수 있습니다.
  • GroupProduct- 함께 판매되는 몇 가지 간단한 제품.

먼저 모든 단순 제품을 생성 한 다음 동일한 제품의 변형 인 여러 제품과 여러 간단한 제품의 조합 인 마지막 그룹 제품으로 구성 가능한 제품을 만듭니다.

사용자가 카테고리로 이동하면 세 가지 유형을 모두 보여 주어야합니다. 단순 제품이 구성 가능한 제품의 일부인 경우 두 번 보여주고 싶지 않습니다.

쿼리를 어떻게 만드나요? 세 개의 쿼리를 만들어야합니까? 세 가지 모델에서 동시에 Pagination을 사용하려면 어떻게합니까? 어떻게 든 상속을 사용할 수 있습니까?

감사

도움이 되었습니까?

해결책

이 질문은 비즈니스 논리를 조금 더 명확하게 이해하지 못하고 대답하기가 어렵다고 생각합니다. 내 가정은 다음과 같습니다.

  1. 구성 가능한 옵션은 임시입니다. 즉, 공을 빨간색, 파란색 및 노란색으로, 소형, 중간 및 큰 셔츠를 판매합니다. 카테고리를 초월하지 않기 때문에 이러한 옵션을 추상적으로 표현할 수있는 방법은 없습니다. (그렇다면 데이터베이스 디자인이 모두 잘못되었습니다. 모든 것이 사용자 지정 색상 옵션이 있으면 데이터베이스 테이블의 열을 만들 것입니다.)
  2. 각 구성 옵션에는 회사에 기존 비즈니스 신원이 있습니다. 빨간 공이나 그와 비슷한 SKU가 있습니다. 어떤 이유로 든 가능한 각 구성 옵션에 대한 데이터베이스 행이 필요합니다. (그렇지 않다면 다시 한 번 잘못하고 있습니다.)

이 경우 가장 간단한 권장 사항은 모든 제품이 필드와 함께 상속받는 기본 클래스를 갖는 것입니다. representative_product_id. 아이디어는 모든 제품에 대해 카테고리 페이지 또는 카탈로그의 다른 곳에 표시되는 대표 버전이 있다는 것입니다. 데이터베이스에서는 다음과 같습니다.

Name          id    representative_id
red_ball      1     1
blue_ball     2     1
green_ball    3     1
small_shirt   4     4
medium_shirt  5     4
large_shirt   6     4
unique_thing  7     7

django 쿼리는 사용합니다 F objects 버전 1.1 이상이있는 경우 단지:

SimpleProduct.objects.filter(representative_id=F('id'))

대표적인 ID가 자신의 ID와 일치하는 쿼리 세트를 반환합니다.

이 시점에서 누군가는 데이터 무결성을 요구할 것입니다. 주요 조건은 그 것입니다 representative_id 모든 경우에 그 물체를 가리켜 야합니다 representative_id 그것과 일치합니다 id. 다음과 같이 직접 이것을 시행하는 방법이 있습니다. pre_save 유효성 검사기 또는 그와 비슷한 것. 당신은 또한 ProductType a representative_id 열. 즉:

Products
Name          id    product_type
_________________________________
red_ball      1     ball
blue_ball     2     ball
green_ball    3     ball
small_shirt   4     shirt
medium_shirt  5     shirt
large_shirt   6     shirt
unique_thing  7     thing

Types
Name          representative_id
_______________________________
ball          1
shit          4
thing         7

이것은 무결성을 일부 유효성 검사기로 시행 할 필요성을 대체하지는 않지만 조금 더 추상적입니다.

다른 팁

장고와 함께 가십시오 다중 테이블 상속, 기본 클래스를 사용하면 직접 시동하지 않을 것입니다. 기본 클래스에는 여전히 쿼리를 실행할 수있는 관리자가 있으며 여기에는 모든 서브 클래스 인스턴스의 기본 속성이 포함됩니다.

중복되지 않아야하는 구성 가능한 제품에 대한 질문을 해결하려면 두 가지 옵션이 있다고 생각합니다.

  • 구성 가능한 제품을 객관식으로 구성 할 수있는 구성 가능한 제품으로 구성하십시오 (단순 제품과 관련이 없음). 구성 가능한 프로듀스 체이스가 구성 가능한 제품을 확장하도록하십시오. 이렇게하면 결과에 단일 구성 가능 제품이 있으며 중복성이 없습니다.
  • 구성 가능한 제품을 다양한 옵션과 연관시키고 선택한 옵션에서 가격을 계산하기위한 규칙을 설계하십시오. 간단한 추가는 괜찮을 것입니다. 제품 ID는 선택한 옵션을 인코딩해야합니다. 간단한 제품을 포함하지 않았기 때문에 여전히 중복성이 없습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top