Usando ManyToMany através corretamente para o modelo complexo no django

Eu tenho um relacionamento de modelo semi-complexo no meu aplicativo django.

Eu tenho um grupo (um negócio) que pode ter muitos locais.

Um grupo pode ter muitos provedores (pessoa) também. O problema é que o Provedor está conectado a um grupo específico por meio da localização do grupo. Isso quer dizer que um provedor pode ter esse local. Na realidade, acredito que um provedor pode ter muitos locais (pertencentes a vários grupos). A maneira que eu tenho isso no meu django até agora que eu não acho correto é assim:

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) 

Minha pergunta é: o meu modelo de grupo (e / ou provedor) precisa ter algum tipo de relacionamento especificado em suas definições de modelo?

 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') 

Isto é para que eu possa obter uma lista de grupos de um provedor, e os locais de grupos e eu posso obter uma lista de provedores de um grupo e os locais de provedores.Na verdade, mais como os locais se juntam a que. Eu ainda estou aprendendo os sistemas de relacionamento do Django, então qualquer crítica construtiva de como fazer esses relacionamentos funcionarem bem juntos seria útil.

Minha pergunta é: o meu modelo de grupo (e / ou provedor) precisa ter algum tipo de relacionamento especificado em suas definições de modelo?

Sim, muitos para muitos relacionamentos. E você só precisa defini-lo para um modelo ou outro porque muitos para muitos podem ser percorridos em ambas as direções.

Ambas as extremidades de um relacionamento muitos-para-muitos obtêm access automático da API ao outro extremo. A API funciona apenas como um relacionamento “para trás” de um para muitos, acima.

A única diferença está na nomenclatura do atributo: O modelo que define o ManyToManyField usa o nome do atributo do próprio campo, enquanto o modelo “reverso” usa o nome do modelo em minúscula do modelo original, mais ‘_set’ (assim como o reverso). muitos relacionamentos).

Fonte: https://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships

Assim, seus modelos podem ser simplificados.

 class Group(models.Model): group_name = models.CharField(max_length=50) group_contact= models.CharField(max_length=50) providers = models.ManyToMany(Provider, through='ProviderLocations') 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) 

Não tenho certeza porque você está tentando criar um modelo GroupLocation e ProviderLocation . Eu acredito que eles podem ser mesclados.