2012-04-10 10 views
0

Ich bin neu in DJango. Ich habe eine Datenbank mit drei Tabellen:Django, wie man mit Fremdschlüsseln in Kindertabellen umgehen kann

> -CRP 
> - SubComponents of a CRP 
>  - Objectives of a SubComponent of a CRP. 

Ich habe folgende Modelle:

class period(models.Model): 
    period_code = models.IntegerField(primary_key=True,verbose_name='Period code') 
    period_desc = models.CharField(max_length=45,verbose_name='Period description') 
    period_current = models.IntegerField(verbose_name='Current period') 
    def __unicode__(self): 
     return self.period_desc 
    class Meta: 
     db_table = 'period' 

class crp(models.Model): 
    crp_code = models.CharField(max_length=3,primary_key=True,verbose_name='CRP code') 
    crp_desc = models.CharField(max_length=45,verbose_name='CRP description') 
    def __unicode__(self): 
     return self.crp_desc 
    class Meta: 
     db_table = 'crp' 

class subcomponent(models.Model): 
    crp_code = models.ForeignKey(crp,db_column='crp_code',related_name='subcomponent_crp_code',to_field='crp_code',primary_key=True,verbose_name='CRP code') 
    subc_code = models.CharField(max_length=3,primary_key=True,verbose_name='SubComponent Code') 
    subc_desc = models.CharField(max_length=45,verbose_name='SubComponent Description') 
    def __unicode__(self): 
     return self.subc_desc 
    class Meta: 
     db_table = 'subcomponent' 

class objective(models.Model): 
    crp_code = models.ForeignKey(subcomponent,db_column='crp_code',related_name='objective_crp_code',to_field='crp_code',primary_key=True,verbose_name='CRP code') 
    subc_code = models.ForeignKey(subcomponent,db_column='subc_code',related_name='objective_subc_code',to_field='subc_code',primary_key=True,verbose_name='SubComponent Code') 
    obj_year = models.ForeignKey(period,db_column='obj_year',related_name='objective_obj_year',to_field='period_code',primary_key=True,verbose_name='Objective year') 
    obj_code = models.CharField(max_length=7,primary_key=True,verbose_name='Objective code') 
    obj_desc = models.CharField(max_length=45,verbose_name='Objective description') 
    def __unicode__(self): 
     return self.obj_desc 
    class Meta: 
     db_table = 'objective' 

alles funktioniert gut für die „Subkomponente“ -Modell (Verweis auf die CRP); In der Verwaltung der "Subkomponente" kann der Benutzer ein CRP ziehen und eine Subkomponente hinzufügen.

Das Modell "objective" verweist jedoch auf das Modell "subcomponent". Bei der Verwaltung von "Ziel" möchte ich, dass der Benutzer ein CRP herunterzieht und auswählt und dann die Unterkomponenten dieses CRP ebenfalls in einer Pull-Down-Liste filtert. Wie kann ich das machen?

Vielen Dank, Carlos.

+0

Sie bräuchten Ajax oder ein mehrstufiger Form zu verwenden. Der Datenaustausch mit dem Server erfolgt nicht über HTML-Aktionen wie das Auswählen eines Elements in einer Dropdown-Liste. –

Antwort

0

Werfen Sie einen Blick auf django-smart-selects

+0

Danke für die Antwort. Es scheint, dass Smart-Select das Problem lösen kann. Allerdings verkettet es "_id" mit meinen Schlüsseln und erzeugt so einen Fehler ... Leider ist seine Unterstützung sehr schlecht. – QLands

+0

Es funktionierte perfekt für mich vor ein paar Wochen. Vielleicht ist es wegen 'db_column' in Ihren Modellen? – ilvar

Verwandte Themen