2016-07-13 5 views
0

Ich habe versucht, zahlreiche Dinge zu lösen in Django Objekt Filterung, aber damit kein Glück.Holen von Objekten in komplexen durch Beziehung Django

Wenn ich einen Primärschlüssel für ein Individuum verwende, möchte ich eine Objektliste aller ihrer Meilensteine ​​erstellen.

TEAM MEMBER -- owns many tasks through --> OWNER -- -- > TASKS -- each task has multiple milestones --> MILESTONES 

Die Modelle sind wie folgt::

Meine Modelle sind als solche angelegt

class TeamMember(models.Model): 
    member_name = models.CharField(max_length=140) 
    email = models.EmailField() 
    task= models.ManyToManyField(Task, through='Owner') 

class Owner(models.Model): 
    teammember = models.ForeignKey(TeamMember, on_delete=models.CASCADE) 
    task = models.ForeignKey(Task, on_delete=models.CASCADE) 

class Task(models.Model): 
    task_name = models.CharField(max_length=140) 
    task_description = models.TextField(null=True, blank=True) 
    last_updated = models.DateTimeField(null=True, blank=True) 

class Milestone(models.Model): 
    name = models.CharField(max_length=140) 
    task= models.ForeignKey(Task, on_delete=models.CASCADE) 
    expected_date = models.DateTimeField() 

Die folgende nicht funktioniert für mich:

Milestones.objects.filter(teammember__id) 

Irgendwelche Ideen?

+0

Geben Sie Ihren tatsächlichen Modellcode ein. Wir können sie nicht anhand der von Ihnen bereitgestellten Informationen wiederherstellen. – solarissmoke

+0

Die obigen Modelle wurden veröffentlicht – NickP

Antwort

1

Sie müssen mehrere double.underscore-Schritte verwenden. Der tatsächliche Code hängt von Ihren genauen Modell- und Feldnamen ab. Etwas wie: Milestones.objects.filter(task__owner__teammember__id=1)

0

Ich möchte Sie Meilenstein Daten für ein bestimmtes Element erhalten, können Sie es durch die Felder im Wert queryset definieren, wie folgt:

TeamMember.objects.filter(id=1).values 
('task__milestone','owner__task__milestone', 
'task__milestone__expected_date','task__milestone__name') 

ich es nicht testen, aber sicherlich wird es alle damit verbundenen Informationen bekommen.