2014-10-14 2 views
2

나는 고객이 좋아하는 공급 업체의 저장, 내 클래스 다이어그램에 (울부 짖는 이미지 참조) 할 수있는 관계를 나는 다음과 같은 관계가 만들려고 해요 : 첫 번째 응용 프로그램에서장고 manytomany 관계 2 개 이상의 앱

을 나는 사람 객체를 가지고있다. 이것은 공급자와 클라이언트에 의해 상속된다. 두 번째 애플리케이션에는 상점 객체가있다. (이것은 판매자와의 관계가 뒤떨어 지지만 클래스 다이어그램에는 보이지 않는다. 이것은 두 번째 애플리케이션이되는 이유이다.) instantied)

문제는 클라이언트가 벤더와 저장소와의 관계가 많지만 관계 클라이언트/저장소가 오류를 생성하여 app2가 isntant 응용 프로그램 1 후에 ied.

generic manytomany 관계를 만들 수있는 방법이 있습니까?

원인 클라이언트는 저장 많은 클라이언트를 가질 수 있습니다, 많은 벤더와 많은 상점을 가질 수 있고 업체는 많은 고객

class diagram

내가 사용하는 코드를 가질 수 있습니다

class Store(models.Model): 
    name = models.CharField("Nome", max_length=100) 
    description = models.CharField("Descrição", max_length=300) 

    class Meta: 
     app_label = 'store' 

class Person(models.Model): 
    first_name = models.CharField("Primeiro Nome", max_length=100) 
    last_name = models.CharField("Ultimo Nome", max_length=100) 

    class Meta: 
     app_label = 'core' 


class Vendor(Person): 
    bio = models.TextField("Bio", max_length=300, blank=True) 
    last_update = models.DateTimeField("Ultima Atualização", auto_now=True) 

    class Meta: 
     app_label = 'core' 


class Client(Person): 
    favorite_stores = models.ManyToManyField(Store) 
    favorite_vendors = models.ManyToManyField(Vendor) 

    class Meta: 
     app_label = 'core' 

이 코드주고를 나 다음과 같은 오류 :

self.models_module = import_module(models_module_name) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/core/models.py", line 7, in <module> 
    from store.models import Store 
    File "/store/models.py", line 6, in <module> 
    from core.models import Vendor 

그리고 w 관리자가보고 싶은 모자는 다음과 같이 간단합니다. admin

+0

을 가지고 (순환 종속성을 피하기 위해) 직접 문자열을 사용 다음을보십시오 : https://github.com/coleifer/django-generic-m2m – Brandon

답변

4

단지, 대신에 "저장"모델을 가져 오는 두 ManyToMany 관계를 추가

class Client(Person): 
    favorite_stores = models.ManyToManyField('store.Store') 
    favorite_vendors = models.ManyToManyField(Vendor) 
+0

매력처럼 작동했습니다! 고맙습니다! –

1

두 가지 실수가 있습니다. 가장 확실한 것은 순환 종속성이 있다는 것입니다. 하나의 모델이 다른 모델을 가져오고 첫 번째 모델을 가져옵니다 ... 모델을 가져 오지 않고 다른 모델을 가져 오는 것으로 이스케이프 처리 할 수 ​​있습니다.

다른 실수는 여기서 많이 볼 수 있습니다. 클라이언트 모델의 양쪽에 ManyToMany가 필요하지 않습니다. 실제로 클라이언트 이며 Store와 Vendor 간의 다 대다 관계의 연결 테이블입니다. 따라서 실제로는 양쪽에 ForeignKeys가 필요합니다. 그래서

, 클라이언트가 있어야한다 :

class Client(Person): 
    favorite_stores = models.ForeignKey('core.Store') 
    favorite_vendors = models.ManyToManyField('core.Vendor') 
+0

사실, 코어가 왜 스토어를 가져와야하는지 알 수는 없지만 전혀 신경 쓰지는 않습니다. –

+0

favorite_stores에 외래 키를 사용하는 클라이언트와 관련된 많은 매장은 어떻게 생깁니 까? –