Vous avez plusieurs options comment aborder le problème. Je vais me concentrer sur le poke-the-code aproach, depuis que ça fait un moment que je me suis baladé avec les internes de django.
J'ai inclus le code approprié ci-dessous à partir du lien. Notez que j'ai supprimé des parties non pertinentes. Notez également que la partie que vous allez éditer VOTRE CAS ICI a besoin d'un refactor.
Suivez l'algorithme suivant jusqu'à ce que vous soyez satisfait.
- Refactorisez les instructions
if
en fonction des champs dans (une ou plusieurs) fonction (s) séparée (s).
- Ajoutez le code d'inspection jusqu'à ce que vous compreniez quels champs correspondent aux relations génériques.
- Ajoutez le code d'extraction jusqu'à ce que les relations génériques soient suivies.
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
S'il vous plaît modifier la question d'inclure la source pertinente. Je ne vais pas faire l'effort de cliquer sur un autre site juste pour voir de quoi vous parlez, et il est plus difficile pour quelqu'un qui a le même problème que vous de découvrir cette question de cette façon. –
Vous devriez ajouter quelques détails sur votre problème, quel est exactement le problème que vous avez? –