2016-10-16 4 views
1

나는 다음과 같은 REQS에 맞게 할 수있는 적절한 장고 모델을 만들려고 오전 : 주소 클래스모델은 많은 관계로 많은 작동하지

사람과 많은 관계로

사람 클래스가 1

: 클래스 그룹 클래스

예약 클래스와 많은 관계로 많은 사람들이 내 코드입니다

위격의 컬렉션과 그룹이 포함되어있다

class Person(models.Model): 
    first_name = models.CharField(max_length=15) 
    last_name = models.CharField(max_length=20) 

    def __str__(self): 
     return self.first_name+ ' - ' + self.last_name 


class Address(models.Model): 
    person = models.ForeignKey(Person) 
    address_line = models.CharField(max_length=200) 

    def __str__(self): 
     return self.address_line 


class Group(models.Model): 
    group_name = models.CharField(max_length=12) 
    persons = models.ManyToManyField(Person) 

    def __str__(self): 
     return self.group_name 

class Book(models.Model): 
    record_name = models.CharField(max_length=12) 
    person = models.ForeignKey(Person) 
    group = models.ForeignKey(Group) 

    def __str__(self): 
     return self.record_name 

1) 그룹에는 이제 여러 개의 Person이 포함될 수 있지만 Person에는 그룹이 포함되지 않습니다. 나는 Person 클래스에 다음 코드를 추가하는 경우는 확실하지 않다 : 책 클래스는 이제 책 레코드 당 사람 & 그룹의 한 레코드가 포함

groups = models.ManyToManyField(Group) 

2). 그것은 어떤 PARAMS을 요청 컴파일하지 않기 때문에

person = models.ForeignKey(Person, on_delete=models.CASCADE()) 

: 나는 모델에 외부 키를 추가 할 때

3), I는 on_delete 태그를 제거했습니다.

나는이 모든 것을 C#으로 만드는 법을 알고 있지만, 나는 파이썬/장고에서이 간단한 작업에 얽매여있다.

+0

에 바인더 제본되는 방법. 이것은 잘못된 것입니다. 외래 키는 엔티티들 간의 양방향 관계를 구축하므로'person.group_set.all()'은 사용자가 속한 그룹을 제공합니다. 또한 디자인은 일관성 문제에 취약합니다. 이것이 당신의 디자인에 의해 허용되어야하는지 확실하지 않지만 책은 책의 다른 그룹에 속한 사람이 소유 할 수 있습니다. – ozgur

답변

1

1) ManyToMany 필드는 모델 중 하나에서만 나타나야하고, Person 모델에서 원하는 것처럼 보입니다. ManyToMany 필드에 대한 데이터가 다른 테이블에 저장된다는 것을 이해하는 것이 중요합니다. Django는 buth 모델을 통해서만이 필드를 볼 수 있습니다 (그래서 basiclly, 어디서 편리하게 움직이는 지 선택하십시오).

2) 구조를 보면 ManyToMany 필드 부터까지 다른 테이블을 사용하는 것이 좋습니다. 여기에 예입니다. "그룹이 지금 여러 사람 포함 할 수 있지만, 사람은 어떤 그룹을 포함하지 않는"

class Activity(models.Model): 
    name = models.CharField(max_length=140) 
    description = models.TextField(blank=True, null=True) 

class Route(models.Model): 
    title = models.CharField(max_length=140) 
    description = models.TextField() 
    activities_meta = models.ManyToManyField(Activity, through = 'RouteOrdering') 

class RouteOrdering(models.Model): 
    route = models.ForeignKey(Route, on_delete=models.CASCADE) 
    activity = models.ForeignKey(Activity, on_delete=models.CASCADE, related_name='activita') 
    day = models.IntegerField() 
    order = models.IntegerField(default=0) 

데이터가 ManyToMany 필드

관련 문제