2009-07-12 13 views
10
class Achievement(MyBaseModel): 
    parent_achievement = models.ForeignKey('self', blank=True, null=True, help_text="An achievement that must be done before this one is achieved") # long name since parent is reserved 

posso fare:Django: come seguire ForeignKey ('self') all'indietro

Achievement.objects.get(pk="1").parent_achievement 

che è grande. Ma come faccio a prendere tutti i bambini?

Achievement.objects.get(pk="1").parent_achievement_set 

non funziona (e probabilmente dovrebbe avere un po 'di più la notazione intorno ad esso), e non ho visto troppo durante la ricerca.

È possibile? Cadere in SQL?

risposta

16

Per impostazione predefinita, Django chiamerà il invertire il nome del modello, seguito da "_set", quindi sarebbe

Achievement.objects.get(pk="1").achievement_set 

Se questo non ti si addice, utilizzare l'argomento opzionale related_name a models.ForeignKey:

class Achievement(MyBaseModel): 
    parent_achievement = models.ForeignKey(
     'self', 
     blank=True, 
     null=True, 
     help_text="An achievement that must be done before this one is achieved", 
     related_name="child_achievement_set" 
    ) # long name since parent is reserved 

Achievement.objects.get(pk="1").child_achievement_set 
+7

meraviglioso. ha funzionato alla grande comprerebbe ancora. A ++ –

1

non so se questo è il modo migliore, ma questo diventa anche il lavoro fatto

Achievement.objects.filter(parent_achievement=1) 

o

Achievement.objects.filter(parent_achievement__pk=1) 
Problemi correlati