Hai diverse opzioni su come affrontare il problema. Mi concentrerò sull'aprano poke-the-code, dal momento che è stato un po 'di tempo da quando ho fatto il giro con gli interni di django.
Ho incluso il codice rilevante qui sotto dal collegamento. Si noti che ho rimosso le parti non pertinenti. Si noti inoltre che la parte che si sta modificando è IL TUO CASO ha bisogno di un refactoring.
Seguire il seguente algoritmo finché non si è soddisfatti.
- Refactoring le istruzioni
if
in base ai campi in (uno o più) funzioni separate.
- Aggiungere il codice di ispezione fino a quando non si capisce quali campi corrispondono a relazioni generiche.
- Aggiungere il codice di estrazione finché non vengono seguite le relazioni generiche.
Test.
def handle_models(self, models, **options):
# SNIP handle options
all = objects
if propagate:
collected = set([(x.__class__, x.pk) for x in all])
while objects:
related = []
for x in objects:
if DEBUG:
print "Adding %s[%s]" % (model_name(x), x.pk)
# follow forward relation fields
for f in x.__class__._meta.fields + x.__class__._meta.many_to_many:
# YOU CASE HERE
if isinstance(f, ForeignKey):
new = getattr(x, f.name) # instantiate object
if new and not (new.__class__, new.pk) in collected:
collected.add((new.__class__, new.pk))
related.append(new)
if isinstance(f, ManyToManyField):
for new in getattr(x, f.name).all():
if new and not (new.__class__, new.pk) in collected:
collected.add((new.__class__, new.pk))
related.append(new)
# SNIP
objects = related
all.extend(objects)
# SNIP serialization
Si prega di modificare domanda per includere l'origine. Non farò lo sforzo di fare clic su un altro sito solo per vedere di cosa stai parlando, ed è più difficile per qualcuno che ha lo stesso problema di scoprire questa domanda in questo modo. –
Dovresti aggiungere alcuni dettagli sul tuo problema, qual è esattamente il problema che hai? –