2009-02-03 11 views
1

J'ai un problème pour implémenter django mptt.Problème lors de l'utilisation de django mptt

Voici mon modèle:

class Company(models.Model): 
     name = models.CharField(max_length=100) 
     parent = models.ForeignKey('self', null=True, blank=True, related_name='children') 

    mptt.register(Company, order_insertion_by=['name']) 

Et

class Financials(models.Model): 
    company = models.ForeignKey(Company, related_name="financials") 
    year = models.IntegerField() 
    revenue = models.DecimalField(max_digits = 10, decimal_places = 2) 

Alors, que je regarde comment ajouter financière comme un enfant à la société. J'ai essayé mptt.register(Financials, parent = Company) ce qui bien sûr me donne une erreur.

structure pour myTree sera:

company1 
....................> Financial1 
--------------------> Financial 2 

company2 
-------------------->Financial 3 

Merci

+0

Avez-vous besoin de l'ajouter comme un noeud feuille? Je pensais que vous avez déjà résolu cela à travers la relation de clé étrangère. – Staale

+0

D'accord avec Staale; vous avez le ForeignKey, pourquoi les services financiers doivent-ils être impliqués dans la structure arborescente? –

+0

Le problème ici est que j'essaie de faire des trucs Acl ici. Donc, pour cela, je dois enregistrer le modèle dans la structure de l'arbre mptt. Donc, si je retire la clé étrangère de la finance alors comment puis-je ajouter financail comme un enfant à la société ?? –

Répondre

1

Django-MPTT ne prend pas en charge plusieurs types d'objets dans le même arbre. Vous pouvez avoir Financial et Société hériter tous les deux de la même classe parente, puis générer l'arborescence à partir d'instances de cette classe parente. Vous devez stocker un champ "type de contenu" sur la classe parente afin de pouvoir convertir les instances de la classe parente dans la sous-classe appropriée. Ceci est un hack grossier, car il viole l'esprit de l'héritage. Un financier n'est pas une entreprise, c'est un attribut d'une entreprise. La bonne réponse est de réparer votre conception ACL afin que vous puissiez utiliser une ForeignKey.

0

Je recommande django-polymorphic_tree

Questions connexes