내 장고 앱에 준결정 모델 관계가 있습니다.ManyToMany를 통해 장고의 복잡한 모델을 올바르게 사용하기
나는 그룹이 많은 업체 (사람)도있을 수 있습니다 그래서
많은 지역 을 할 수있는 그룹 (사업을)이있다. 문제는 공급자가 그룹 위치를 통해 특정 그룹에 연결되어 있다는 것입니다. 즉 공급자가 그 위치를 가질 수 있습니다. 실제로 제공자는 여러 위치 (여러 그룹에 속함)를 가질 수 있다고 생각합니다. 내 그룹 (및/또는 공급자) 모델
class GroupLocations(models.Model):
address_id = models.ForeignKey(Address, on_delete= models.SET_NULL)
group_id = models.ForeignKey(Group, on_delete=models.SET_NULL)
doing_business_as = models.CharField(max_length = 255)
created_at=models.DateField(auto_now=false, auto_now_add=true)
updated_at=models.DateField(auto_now=true, auto_now_add=true)
class ProviderLocations(models.Model):
provider_id = models.ForeignKey(Provider, on_delete=models.CASCADE)
group_location_id = models.ForeignKey(GroupLocations, on_delete=models.CASCADE)
created_at=models.DateField(auto_now=false, auto_now_add=true)
updated_at=models.DateField(auto_now=true, auto_now_add=true)
내 질문은 지정된 관계의 일종이 필요 않은 : 나는 지금까지 내가 올바른 생각하지 않는 내 장고이이 방법은이 방법입니다 그들의 모델 정의에서?
class Group(models.Model):
group_name = models.CharField(max_length=50)
group_contact= models.CharField(max_length=50)
#do I need something like the following:
providers = models.ManyToMany(Provider, through='ProviderLocations')
provider_locations = models.ManyToMany(Group, through='GroupLocations'
class Provider(models.Model):
created_at=models.DateField(auto_now=false, auto_now_add=true)
updated_at=models.DateField(auto_now=true, auto_now_add=true)
groups = models.ManyToManyField(Group, through='GroupLocations')
group_locations = models.ManyToMany(GroupLocations, through='ProviderLocations')
이 그래서 난 공급자에서 그룹 목록을 얻을 수 있으며, 그룹의 위치 나는 위치에 가입 더 같은 locations.Actually 그룹에서 공급자와 공급자의 목록을 얻을 수있는에 어느. 나는 여전히 장고의 관계 시스템을 배우고 있기 때문에 이러한 관계를 잘 작동시키는 방법에 대한 건설적인 비판이 도움이 될 것입니다.
네 말이 맞을지 모르겠다. 나는 이것을 재고해야한다. 나는 그룹이 어떻게 그 위치를 통해 공급자를 볼 것인지 확신하지 못했다 (group_locations를 통해 연결됨). 내 생각에 분리 이유는 제공자가 그룹의 일부이지만 특정 위치에있을 수 있다고 생각합니다. 위의 한 줄에서 작동하는 제공자 위치 (그룹 위치로 돌아 오는 그룹 위치가있는 공급자 위치)를 통해 그룹의 일부가 될 수도 있습니다. 아니면 당신이 공급자 위치 대 그룹 위치에 대해 묻는 것이 었습니까? – Codejoy
그렇습니다. 이것이 ProviderLocation 또는 GroupLocation 모델이 제공하는 것입니다. 두 가지 방법 모두 중복성이 있습니다. – e4c5
내 댓글이 변경되었습니다. – Codejoy