2017-07-16 1 views
0

IESI am avoir le tableau suivantDjango plusieurs à plusieurs, utilisez une table pour deux ou plusieurs modèles

  1. hôtels(modèle)

    • id
    • Nom
  2. chambres(modèle)

    • id
    • Nom
  3. installations(modèle)

    • id
    • Nom
  4. facility_properties

    • facility_id
    • linking_id
    • Type (hôtel ou chambre)

dans Django je veux créer un lien. dans les deux, l'hôtel et les chambres, je veux utiliser la table facility_properties comme table de liaison many-to-many. Il peut s'agir d'un lien d'hôtel et d'établissement ou d'un lien entre une pièce et un établissement. linking_id peut être un identifiant d'hôtel ou de chambre où les types définissent si son hôtel ou sa chambre

Répondre

0

Vous devez utiliser un GenericForeignKey qui vous permet d'avoir une relation avec n'importe quel type de modèle.

Traduire ce que vous avez besoin conduirait à ceci:

class FacilityProperty(models.Model): 
    facility = models.ForeignKey(facility, on_delete=CASCADE) 
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    linking_id = models.PositiveIntegerField() 
    link_object = GenericForeignKey('content_type', 'linking_id') 

Le link_object pointera soit un Hotel ou un Room, selon la façon dont vous utilisez la relation.

Voici un exemple:

h = Hotel.objects.create() 
r = Room.objects.create() 
f = Facility.objects.create() 

prop = FacilityProperty(link_object=h, facility=f) 
prop.save() 

prop = FacilityProperty(link_object=r, facility=f) 
prop.save()