2011-04-14 2 views
1

현재 사용하고있는 모델에는 본질적으로 3 개의 클래스가 있습니다. 루트 클래스, 루트 클래스에 연결된 트리 및 트리 노드의 아무 곳에 나 연결할 수있는 리프 노드 클래스.django-mptt와 GenericForeignKey를 사용할 수 있습니까?

상점/카테고리/제품 또는 숍/카테고리/카테고리/제품

제품은 카테고리에만 링크 가능합니다. 카테고리는 다른 카테고리 또는 상점에 링크 될 수 있습니다.

일반 외래 키를 사용하여 범주를 상점 또는 다른 범주에 연결하지만 범주는 트리이므로 TreeForeignKey 필드가 필요합니다. 나는 이것을 models.py 또는 동일한 것을 성취하는 다른 방법으로 어떻게 수행 할 수 있는지에 대한 예를 찾고있다.

답변

0

이 경우 GenericForeignKey가 필요하지 않습니다.

mptt fk를 정상적으로 구현하고 카테고리 트리를 설정하고 상점 FK 필드를 추가하여 상점에 연결하십시오.

from django.db import models 
from mptt.models import MPTTModel, TreeForeignKey 

class Shop(models.Model): 
    name = models.CharField(max_length=50) 

class Category(MPTTModel): 
    name = models.CharField(max_length=50, unique=True) 
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children') 
    shop = ForeignKey(Shop, null=True, blank=True) 

class Products(models.Model): 
    name = models.CharField(max_length=50) 
    category = models.ForeignKey(Category) 
+0

이 경우 ForeignKeyField가 중복됩니까? 10000 개의 카테고리가 있다고 가정 할 때, 소수만 상점 ForeignKey를 포함합니다. 또한 ForeignKeyField는 오타입니까? 순진한 관점에서 나는 GenericForeignKey의 개념이 여러 개의 (부분적으로 중복되는) 외래 키를 가지고 있어야하는 것을 대체 할 것이라고 생각했습니다. – Calum

관련 문제