2009-10-20 8 views
0

Compte tenu du modèle de classe comme suit:Comment modélisez-vous ceci dans django?

alt text http://www.forteresse.net/site/stackoverflow/classes.png/image

Comment faites-vous cela en models.py?

class House(models.Model): 
    foo = models.CharField(max_length=123) 

class Caravan(models.Model): 
    foo = models.CharField(max_length=123) 

class Door(models.Model): 
    bar = models.CharField(max_length=123) 
    house = models.ForeignKey(House) 
    caravan = models.ForeignKey(Caravan) 

Mais ces définitions de clé étrangère peuvent ne pas être ce qui est prévu. Comment code-tu ceci en django? L'intention est de réutiliser le même modèle "Door" pour "House" et "Caravan". Après avoir creusé plus profondément, j'ai trouvé ceci; Est-ce la bonne façon de modéliser le problème?

class House(models.Model): 
    foo = models.CharField(max_length=123) 

class Caravan(models.Model): 
    foo = models.CharField(max_length=123) 

class Door(models.Model): 
    bar = models.CharField(max_length=123) 
    house = models.ForeignKey(House, null=True, blank=True) 
    caravan = models.ForeignKey(Caravan, null=True, blank=True) 

Répondre

4
class Door(models.Model): 
    bar = models.CharField(max_length=123) 

class Caravan(models.Model): 
    foo = models.CharField(max_length=123) 
    doors = models.ManyToManyField(Door) 

class House(models.Model): 
    foo = models.CharField(max_length=123) 
    doors = models.ManyToManyField(Door) 
2

Je pense que vous devriez essayer:

class Door(models.Model): 
    bar = models.CharField(max_length=123) 

class House(models.Model): 
    foo = models.CharField(max_length=123) 
    door = models.ForeignKey(Door) 

class Caravan(models.Model): 
    foo = models.CharField(max_length=123) 
    door = models.ForeignKey(Door) 
+0

Il peut y avoir beaucoup de portes dans une maison ou dans une caravane ... – toaster

+3

Il faut donc utiliser un ManyToManyField. –

1

Pouvez-vous préciser ce que vous cherchez vraiment avec une requête par exemple? Ce n'est pas clair pour moi. Ce que je pense que vous cherchez:

class Door(models.Model): 
    bar = models.CharField(max_length=123) 

class House(Door): 
    foo = models.CharField(max_length=123) 

class Caravan(Door): 
    foo = models.CharField(max_length=123) 

Ensuite, vous pouvez faire des choses comme Caravan.objects.values('foo','bar')

Questions connexes